任何一门编程语言都离不开对各种工具包的使用,工具包的管理就显得异常重要了。Go 的包管理方式是逐渐演进的,本文介绍Go语言的两种包管理模式。
GOPATH模式引包(不推荐)
GOPATH
$GOPATH/srcsrc
main.gomodel
- 目录层级如下
├───main
│ main.go
└───model
utils.go
main/main.goutilsNamemodel/utils.gopackage modelvar Name string = "xiao"
- 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=onGOPATH$GOPATH/srcpackageGOROOT
package go_code/pointer/model is not in GOROOT
解决方法一:
设置GO111MODULE=off
go env -w GO111MODULE=off
go env
然后重新编译即可
解决方法二
go mod
GO MODULE 模式引包(推荐)
go module 介绍
go modules 是 golang 1.11 新加的特性。
模块是相关Go包的集合
modules是源代码交换和版本控制的单元
go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。
GO111MODULE 有三个值:off, on和auto(默认值)。
GOPATH/src
$GOPATH/pkgmodule
GO111MODULEGOPROXY
使用 go mod 创建新项目
GO111MODULEgo mod
1、初始化项目
mkdir test-mod
cd test-moe
go mod init maze-mod
go.mod
module test-mod
go 1.17
require github.com/astaxie/beego v1.12.1
require (
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect
golang.org/x/text v0.3.0 // indirect
)
indirectv0.0.0-20190620200207-3b0461eec859
go.modgo toolchaingo toolchaingo.modgo.mod
2、添加依赖
main.gogo run main.gogo modgo rungo get ./ ...go get package@version
3、查看依赖
go list -m allgo mod tidygo.mod
go.sum
用来做包版本管理
go.sumgo.modgo.sumhashgo.modgo.sum
总结
GOPATH模式GO MODULEGOPROXY
NPMYarn
热爱前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。
希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。