一、GOPATH 环境变量

⏱️ 5 分钟 步骤 1 / 3

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,我们可以根据自己的程序的功能模块划分不同的包。

  • 包的作用域

包内
在同一个包内定义的函数、变量、常量、结构体,可以被包内的所有其他代码任意访问,它们属于包内公开。

包外
如果函数、变量、常量、结构体位于不同的包下,如果将它们的首字母使用大写标识,表示它们是公开访问的。对于结构体字段。如果想要在包外进行访问,还要让结构体字段变量名使用首字母大写。