任何一门编程语言都离不开对各种工具包的使用,工具包的管理就显得异常重要了。Go 的包管理方式是逐渐演进的,本文介绍Go语言的两种包管理模式。

GOPATH模式引包(不推荐)

GOPATH
$GOPATH/srcsrc
main.gomodel
  1. 目录层级如下
├───main
│       main.go
└───model
        utils.go
main/main.goutilsNamemodel/utils.gopackage modelvar Name string = "xiao"
  1. 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

热爱前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。

希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。