32

Golang首字母大小写的意义

 4 years ago
source link: https://www.tuicool.com/articles/ziQfeuz
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

博客地址:https://www.jianshu.com/p/d3c33e243a71

一、含义简介

1.1、首字母大写 == public

1.2、首字母小写 == private

注意:这个 public 和 private 是相对于 go 文件首行 package 声明的包名来说

二、package 声明的包名与该文件所处于实际文件系统中目录的关系

2.1、一般情况下建议这个包名和所在的目录名保持一致,这样容易辨认。但不一致也是可以的,比如我在 src/aa/bb 目录下新建了 fab.go 文件,我在 fab.go 开头,声明包名 package pab,声明与实际目录不一致。

package pab
type (
          EventObserver struct {  // 大写外包可访问
                  id int  // 小写外包不可访问
          }
          EventNotifier struct { // 大写外包可访问
                  ID int // 大写外包可访问
          }
          event struct { // 小写外包不可访问
                 id int  // 小写外包不可访问
           }
)
func testAuthA() { // 外包不可访问
        // 在同一个包里方法和属性大小写都可以访问。
        n := &event { id : 1 }  
}
func TestAuthB() {  // 外包可访问
}

2.2、使用 import 的时候,import 后面的跟着的是文件所在的目录(比如刚才创建文件的目录 src/cc/dd ),不是 package 声明的包名,如果需要使用该文件需要 import pab 引用。

package pcd
// import pab 错误
import aa/bb
func testAuth(){
       // n := &pab.EventObserver{ id : 1 }  会报错,id 小写跨包无法访问
       n1 := &pab.EventNotifier { ID : 1 }
       // pab.testAuthA() 错误,访问不到
       pab.TestAuthB()
}

三、两个 Go 文件针对目录和 package 不同组合的访问情况

3.1、两个 Go 文件在同一个目录里,不同的 package 名

Goland 语法无法不通过,不允许在同一个路径下,在不同 Go 文件里声明不同的包名

3.2、两个 Go 文件在不同的目录,同一个包名

与不同的目录,不同的包名效果一致,受大小写权限影响。

3.3、两个 Go 文件在同一个目录,同一个包名

和在同一个 Go 文件里效果一样,不受大小写权限影响都可以相互访问。

参考博客:https://blog.csdn.net/LightUpHeaven/article/details/80817462


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK