任何一门编程语言都离不开对各种工具包的使用,工具包的管理就显得异常重要了。Go 的包管理方式是逐渐演进的,本文介绍Go语言的两种包管理模式。
GOPATH模式引包(不推荐)
在 1.5 版本之前,所有的依赖包都是存放在 GOPATH
下,没有多版本控制。
go的编译器会在 $GOPATH/src
下面寻找对应的模块,src
下的每一个目录都可以对应一个模块,目录中的目录也可以是一个模块
下面展示如何在入口文件main.go
里引入非标准库model
包中的变量
- 目录层级如下
├───main
│ main.go
└───model
utils.go
-
main/main.go
入口文件引入utils
里面的Name
变量 -
model/utils.go
文件声明package model
,并定义变量var Name string = "xiao"
,变量必须是大写,否则报错name not exported by package model
- main.go 文件引model包
package main
import (
"fmt"
// 引包
// 省略GOPATH/src, Go编译的时候会自动在src目录下寻找
"go_code/pointer/model"
)
func main() {
fmt.Println(model.Name) // xiao
}
开启GO111MODULE后非module项目产生的问题
在GO111MODULE=on
,并且已经设置GOPATH
的条件下,写的代码在$GOPATH/src
下,我想要使用另一个package
里面的内容,并且这个package不是标准库,或者说不在GOROOT
里(一般我们不会修改GOROOT中的内容),编译会报错,如下