结构的私有字段和方法

新手上路,请多包涵

在下面的测试代码中,我希望将 mytypedoPrivate 方法设为私有,以便只有 mytype 的成员可以访问它,但其他类型不能访问它\functions 在 mypackage 包的范围内。

我可以在 golang 中这样做吗?

 package mypackage

type mytype struct {
    size          string
    hash          uint32
}

func (r *mytype) doPrivate() string {
    return r.size
}

func (r *mytype) Do() string {
    return doPrivate("dsdsd")
}

应封装字段 sizehash 以及 doPrivate 方法,其他类型不应访问它们。

原文由 andrew.fox 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 743
2 个回答

这不是“隐私”在 Go 中的工作方式:隐私的粒度是包。

如果您 真的 只希望 mytype 的成员访问某些字段,那么您必须将结构和函数隔离在它们自己的包中。

但这不是通常的做法。 Go 是否是 OOP 是值得商榷的,但很明显,实践并不是像你想做的那样用结构封装代码。通常一个包足够小以保持连贯:如果您不想访问包内的字段,请不要访问它们。

原文由 Denys Séguret 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 Go 中,一个以大写字母开头的标识符从包中导出,并且可以被声明它的包之外的任何人访问。

如果标识符以小写字母开头,则只能从包内访问它。

如果你需要一个类型中的成员只能被该类型的成员访问,那么你需要将该类型及其成员函数放在一个单独的包中,作为该包中的唯一类型。

原文由 nos 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题