Golang首字母大小写的意义(import package解析)

1.大写相当于public

2.小写相当于private

注意:这个public和private是相对于包(go文件首行的package 后面跟的包名)来说的。

3.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}  // 在同一个包里即使是首字母小写,依然可以访问,struct里的属性小写,依然可以访问
}

func TestAuthB(){
}



3.2在import的时候,import的是文件所在目录,也就是实际的文件路径比如我在src/cc/dd目录下新建了fcd.go,我在要引用fab里的结构体,或者函数那么就要 import aa/bb 而不能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()
}

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

测试在Goland里语法都不通过,不允许在同一个路径下,在不同Go文件里使用不同的包名

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

测试和不同的目录,不同的包名效果一致

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

和在同一个Go文件里效果一致

总结:

1.首字母大写访问权限public,首字母小写访问权限private,这个权限针对的是文件所在的路径+文件的包名,完全一致可以忽略这个权限的访问控制(相当于在同一个Go文件里),有一个不一致就受到这个访问权限的限制。什么叫针对路径+包名呢?浅白的说,对比C++的类属性访问权限,在这个类里什么控制符都不妨碍类自己访问自己的属性,出了这个类就受到public,private的限制。同理,Go的访问权限,也是如此。在相同的路径+包名的情况下,不管结构体或者函数的首字母是大写还是小写,都在Go文件里可以访问。


猜你喜欢

转载自blog.csdn.net/LightUpHeaven/article/details/80817462
今日推荐