一、GOPATH 环境变量
1.1 什么是 GOPATH?
golang 包的使用依赖一个重要的环境变量:GOPATH
,无论是自己的代码还是第三方代码,都以GOPATH
作为工作目录和一套完整的工程目录规则。GOPATH 目录约定有三个子目录,主要用于
- src:存放各种包源代码,src 里的一个目录就是一个包
- pkg:存放编译源代码后的类库
- bin:存放编译源代码后的可执行程序
GOPATH
允许多个目录,设置多个目录时,需要使用环境变量分隔符来区分。Unix/Linux 的环境变量分隔符是英文输入法下的冒号(:),windows 的环境变量分隔符是英文分号(;)。
使用GOPATH
时,golang 会在以下目录中搜索包
- GOROOT/src:该目录保存了 Go 标准库里代码。
- GOPATH/src:该目录保存了应用自身的代码和第三方依赖的代码。
1.2 设置 GOPATH 环境变量
在 Unix/Linux 中,使用sudo vim /etc/profile
打开系统 profile 文件,并追加以下内容设置GOPATH
环境变量,同时设置GO111MODULE
为关闭状态,GO111MODULE
环境变量我们在文章中后面部分说明
export GOPATH=/Users/pan/go # 把自己的golang项目目录作为GOPATH的变量
export GO111MODULE=off # 关闭golang 11.1 版本以后的模块功能
使用source /etc/profile
命令重新加载环境变量
1.3. 包的使用
- 引入系统包
我们可以通过package
关键字定义一个包,使用import
引入其他包,如果需要引入多个包,可以将各个包声明在括号内
package main
import (
// 引入系统的包
"fmt"
)
func main() {
// 调用系统包的函数
fmt.Println("Hello World")
}
在以上代码中,我们通过main
关键字定义了 main 包,主函数 main 必须位于 main 包下。程序中引入了fmt
包,该包由 golang 本身提供。
- 引入自定义包
我们在 GOPATH/src 目录下创建两个文件
文件 1,库文件位于jkdev.cn/test/mypkg/lib.go
,添加以下代码
package mypkg
import "fmt"
func TestFunc() {
fmt.Println("call testFunc")
}
文件 2,主文件jkdev.cn/test/main.go
,添加以下代码
package main
// 引入自定义包
import "jkdev.cn/test/mypkg"
func main() {
// 调用自定义包的函数
mypkg.TestFunc()
}
自定义的包由我们自己定义,但要注意的是,一个目录对应一个包,同时,包名应当和目录名一致。引入包时,路径相对应 GOPATH/src,我们可以根据自己的程序的功能模块划分不同的包。
- 包的作用域
包内
在同一个包内定义的函数、变量、常量、结构体,可以被包内的所有其他代码任意访问,它们属于包内公开。
包外
如果函数、变量、常量、结构体位于不同的包下,如果将它们的首字母使用大写标识,表示它们是公开访问的。对于结构体字段。如果想要在包外进行访问,还要让结构体字段变量名使用首字母大写。