Golang中, 是否有某种访问控制机制? (类似Java的private等, 假如在Go中使用OOP编程) ?

实际现象

  1. 假设OOP是我写代码的主要抽象手段

  2. 假设: 访问控制必须从严( 参考: Java )

  3. 想实现

1) 如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。
2) 工具类不允许有 public 或 default 构造方法。
3) 类非 static 成员变量并且与子类共享,必须是 protected。
4) 类非 static 成员变量并且仅在本类使用,必须是 private。
5) 类 static 成员变量如果仅在本类使用,必须是 private。
6) 若是 static 成员变量,必须考虑是否为 final。
7) 类成员方法只供类内部调用,必须是 private。
8) 类成员方法只对继承类公开,那么限制为 protected。

预期现象

  1. 了解到: Go中, 首字母大写, 即为 public, 其余为private

  2. 但是手段不够「细粒度」

阅读 5.7k
3 个回答

golang 首先他没有类的概念 如果你要把struct类型理解为类,也可以.但是他没有static
第二,golang中也没有继承的概念,他只有组合.所以final和protected的问题也不存在
golang的权限非常简单,就像你说的那样大小写来控制

写程序要透过现象看本质,有没有OOP都一样可以实现功能只是思路不同
使用golang就要抛弃很多原有的OOP思路,你明白了这里用final和protected的目的是什么,换种思路一样可以实现同样的效果.
其实权限无论有多复杂他的基础就是两个,能与不能,至于public,private,protected这些就是面对不同访问者的权限不同.按照这个思路就能写出各种访问控制

很抱歉,如果你需要OOP抽象手段,那Go语言并不适合你,因为Go是一门过程式语言(Go is a Procedural language. There are many more paradigms than Functional and OO, and many have come and gone in trends in the past.)

如果需要OOP作为主要工具,广泛使用的Java是一个很好的选择(跨平台使用字节码,只要对应平台有Java环境)。若是需要更高的性能和对跨平台要求不高,那么C++也是不错的选择,但需要代码编写人员对内存控制等方面有更深厚的功力。

参考链接:https://www.quora.com/Is-Gola...

新手上路,请多包涵

protected 勉强可以用internal(内部包)实现,其他的就没有了。

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