Contents

GO包管理

症状

  • 包与包之间方法无法调用
  • go get …的包无法引用

环境

1
2
3
4
5
6
7
8
-> % lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.4 LTS
Release:        20.04
Codename:       focal
-> % go version
go version go1.18.1 linux/amd64

设置环境变量

1
export GO111MODULE=on

IDE: vscode

单个项目不同包之间方法的访问

  • 确定需被访问的函数、方法或结构体等的开头字母大写,这是Go的访问控制
  • 在各包中初始化go.mod
1
go mod init 取个包名字

生成go.mod文件如下

1
2
3
module  m

go  1.18

VSCode打开多个项目

  • 在根目录中初始化go.work,将子目录加上
1
go work init ./product1 ./product2

go.work如下

1
2
3
4
5
6
7
8
9
go  1.18

use (

 ./product1

 ./product2 

)
  • 多个项目目录
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
-> % tree
.
├── go.work
├── product1
│   ├── go.mod
│   ├── go.sum
│   ├── main.go
│   └── mytest.go
└── product2
    ├── go.mod
    ├── go.sum
    ├── channel.go
    ├── const.go
...

同包

1
2
3
-> % go run main.go 
# command-line-arguments
./main.go:110:2: undefined: TestSet
  • 尝试
1
-> % go run .

get新包,vscode引入

1
go get gopkg.in/fatih/set.v0
  • 引入
1
import "gopkg.in/fatih/set.v0"
  • 直接编译
1
2
3
-> % go run .
mytest.go:9:2: no required module provides package gopkg.in/fatih/set.v0; to add it:
        go get gopkg.in/fatih/set.v0
  • 解决方法
1
2
3
-> % go mod tidy
go: finding module for package gopkg.in/fatih/set.v0
go: found gopkg.in/fatih/set.v0 in gopkg.in/fatih/set.v0 v0.2.1
  • 等2s,可以发现IDE的红杠杠没了

  • 可以发现go.mod及go.sum方法多了几行对gopath中的包的引入

coffee