Go语言面向对象编程中的信息隐藏实践

3

如何使用Go结构体隐藏信息?Go结构体成员对所有人可见。如何在一个包中隐藏某个成员?


3
你可以通过将它们转换为小写来使它们变成私有的。 - squiguy
就像squiguy所说的那样。对于编码到其他格式(JSON,XML等)也是如此。 - Oswin Noetzelmann
1个回答

3

Go不是一种面向对象的语言。但它在包级别上封装了东西。

根据GoLang规范

标识符可以导出以允许从另一个包中访问它。如果满足以下两个条件,则标识符将被导出:

  1. 标识符名称的第一个字符是Unicode大写字母(Unicode类“Lu”);并且
  2. 该标识符在包块中声明,或者它是字段名称或方法名称。

所有其他标识符都未被导出。

如果您不想使结构体变量公开,请不要导出它们。 使用小写字母创建结构类型中的变量。 非导出结构字段仅对同一包可访问。

// unexported struct
type person struct {
    name string // unexported fields can be used only in the same package
    age  int
}

Go语言只允许在包级别上进行粒度控制。可以在不同的包中声明结构体,在需要的文件中使用它们。


这个答案忽略了一个事实,即如果将结构体传回包中的函数,则仍需使它们的结构体(而不仅仅是这些结构体的构造函数)公开。否则无法模拟它们或创建接口。我不认为golang在这个意义上真正提供了信息隐藏。它更像是Python,其中“我们都是成年人”,但具有性能类型。我不能说我是一个粉丝,但我仍然必须在其中编写代码才能获得报酬。 - Landon Poch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接