Go语言入门系列三《Golang包》

一、包的概念

go语言程序都是由包构成的,如我们前面文章提到过的 package main,定义了名为 main 的包,以及代码 import "fmt"导入名为 fmt的包。又如代码 fmt.Println() 则是调用了fmt包中的Println函数。

二、包的定义

定义包的语句我们已经介绍很多次了

package main

三、包的导入

分别导入

import "fmt"
import "math"

分组导入

import(
    "fmt"
    "math"
)

四、自定义包

我们试着创建一个包文件 pack.go 存放在目录 pack 下。pack.go 代码如下

package pack
import (
    "fmt"
)

func SayHi() {
    fmt.Println("hi")
}

然后我们编译这个包

$ cd your_path/pack
$ pack go install

编译成功我们将在 $GOPATH/pkg 目录下找到我们自定义的包。如我的目录 $GOPATH/pkg/learn-go/001/pack

接着我们在项目中引用我们的pack

package main

import "learn-go/001/pack"

func main() {
    pack.SayHi()
}

go自定义包-山顶洞人

注意,按照惯例包名与导入路径的最后一个目录一致,如上面的 learn-go/001/pack 最后一个目录为 pack,我们的包名也是 pack

五、包的导出名

在我们导入了某个包之后,我们可以通过导出名来调用其中的函数,访问其成员。如上面的代码 pack.SayHi().值得注意的是,Golan 规定只有首字母大写的成员才可被外界访问。也就是说如果我们 pack.go中的 SayHi 函数如果改为 sayHi,我们将无法进行访问该函数,相比于其他语言,Golang这样处理直接可以省略访问修饰符,如有些语言的 privatepublic

证明如下,修改 pack.go 代码如下

package pack
import (
    "fmt"
)
//首字母改为小写
func sayHi() {
    fmt.Println("hi")
}

重新编译 pack 包

$ cd your_path/pack
$ pack go install

运行我们的程序,结果如下

package main

import "learn-go/001/pack"

func main() {
    pack.sayHi()
}

go自定义包-山顶洞人

./hello.go:6:2: cannot refer to unexported name pack.sayHi
./hello.go:6:2: undefined: pack.sayHi

未经允许不得转载