Go Package

Go Package

package 基本使用

(1)目中的每个文件夹都是一个package。package下可以嵌套package。但每个.go文件的package以其所在的当前文件夹为准。

(2)在GoLand中新建文件夹时,在该层目录下新建的.go文件,其package默认为当前文件夹名大小写一致。当.go文件创建后,再去修改文件夹名时,需要注意其下的.go文件中的package是否自动修改。

(3)同一层目录下的.go文件,package必须一致,否则编译出错


package 可见性

在go语言中,变量或函数名的首字母大写时,其就是可导出的,小写时则是不可导出的。

函数和变量的可访问性是以包做隔离的

函数或变量 可访问性
同一个包 可/不可导出的 都能访问
其他的包 可导出的 可访问
其他的包 不可导出的 不能访问

同一个包内,均可访问导出/不可导出的变量或函数。无论变量是全局变量还是struct的成员变量,无论函数是全局函数还是隶属于某个struct的成员函数。


package main

main是个特殊的package。go的可执行方法,只有main包下的main方法。

同一级文件夹下的package是main,当该文件夹下的某个.go文件调用同级目录下的变量或方法时,静态编译不报错,但是执行run动态编译时,就会报undefined错误。

dir A
    a1.go
    a2.go


---- a1.go
package main

func main(){
    //静态编译(即写代码时)不报错
    //运行该main()方法时,报错
    B() //调用a2.go文件的B()方法
}


----- a2.go
package main

func B(){
    fmt.Plintln("I am B()")
}

go 初始化顺序

运行main方法时:

  1. 先初始化import的所有包
  2. 先初始化const常量,然后是全局变量var,再是init()函数
  3. 当import下的包都初始化结束后,最后执行main的const, var,init(), main()

你可能感兴趣的:(Go Package)