实际现象
假设OOP是我写代码的主要抽象手段
假设: 访问控制必须从严( 参考: Java )
想实现
1) 如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。
2) 工具类不允许有 public 或 default 构造方法。
3) 类非 static 成员变量并且与子类共享,必须是 protected。
4) 类非 static 成员变量并且仅在本类使用,必须是 private。
5) 类 static 成员变量如果仅在本类使用,必须是 private。
6) 若是 static 成员变量,必须考虑是否为 final。
7) 类成员方法只供类内部调用,必须是 private。
8) 类成员方法只对继承类公开,那么限制为 protected。
预期现象
了解到: Go中, 首字母大写, 即为 public, 其余为private
但是手段不够「细粒度」
golang 首先他没有类的概念 如果你要把struct类型理解为类,也可以.但是他没有static
第二,golang中也没有继承的概念,他只有组合.所以final和protected的问题也不存在
golang的权限非常简单,就像你说的那样大小写来控制
写程序要透过现象看本质,有没有OOP都一样可以实现功能只是思路不同
使用golang就要抛弃很多原有的OOP思路,你明白了这里用final和protected的目的是什么,换种思路一样可以实现同样的效果.
其实权限无论有多复杂他的基础就是两个,能与不能,至于public,private,protected这些就是面对不同访问者的权限不同.按照这个思路就能写出各种访问控制