GOSUMDB找不到
报错如下:
1
2
3
4
5
6
7
huhc @ yjy - huhc : ~ / < sourceCodeDir > $ go mod init < my - project - mod - name >
go : creating new go . mod : module iptables - test
go : to add module requirements and sums :
go mod tidy
huhc @ yjy - huhc : ~ / < sourceCodeDir > $ go mod tidy
go : finding module for package < some pkg from source repo >
< some pkg from source repo >: verifying module : missing GOSUMDB
Copy 原因是GOSUMDB没有配置(或者丢了),一般我在Windows开发的时候没遇到过,这玩意默认值是sum.golang.org
,当你go get和go install的时候除了会从 GOPROXY
下载压缩包,还会调用 GOSUMDB
来检测文件哈希是否正确,这是 Go Module 提供的安全机制,能有效防止代码被篡改。
解决方案:
1
2
3
sudo echo 'GOSUMDB="sum.golang.org"' >> /etc/profile
# 或者,如果你访问sum.golang.org会超时的话,就用这个:
sudo echo 'GOSUMDB="sum.golang.google.cn"' >> /etc/profile
Copy 然后再载入一下这个配置:
新环境,编译任何东西都报这个错:
1
2
3
4
5
6
packages.Load error:
err: exit status 2: stderr:
go: no such tool "compile"
go: no such tool "compile"
go: no such tool "compile"
go: no such tool "compile"
Copy compile就是golang的编译工具,这个提示是找不到这玩意,我们看看go的环境变量:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
huhc@yjy-huhc:~/iptables-test$ go env
GO111MODULE = 'on'
GOARCH = 'amd64'
GOBIN = ''
GOCACHE = '/home/huhc/.cache/go-build'
GOENV = '/home/huhc/.config/go/env'
GOEXE = ''
GOEXPERIMENT = ''
GOFLAGS = ''
GOHOSTARCH = 'amd64'
GOHOSTOS = 'linux'
GOINSECURE = ''
GOMODCACHE = '/usr/local/go/pkg/mod'
GONOPROXY = ''
GONOSUMDB = ''
GOOS = 'linux'
GOPATH = '/usr/local/go'
GOPRIVATE = ''
GOPROXY = 'https://goproxy.cn,direct'
GOROOT = '/srv/go'
GOSUMDB = 'sum.golang.org'
GOTMPDIR = ''
GOTOOLCHAIN = ''
GOTOOLDIR = '/srv/go/pkg/tool/linux_amd64'
GOVCS = ''
GOVERSION = 'go1.21.6'
GCCGO = 'gccgo'
GOAMD64 = 'v1'
AR = 'ar'
CC = 'gcc'
CXX = 'g++'
CGO_ENABLED = '1'
GOMOD = '/home/huhc/iptables-test/go.mod'
GOWORK = ''
CGO_CFLAGS = '-O2 -g'
CGO_CPPFLAGS = ''
CGO_CXXFLAGS = '-O2 -g'
CGO_FFLAGS = '-O2 -g'
CGO_LDFLAGS = '-O2 -g'
PKG_CONFIG = 'pkg-config'
GOGCCFLAGS = '-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build3659640187=/tmp/go-build -gno-record-gcc-switches'
Copy 再看看GOROOT/srv/go
,果然空空如也,那就简单了:
1
2
sudo cp $GOPATH /pkg $GOROOT
sudo cp $GOPATH /src $GOROOT
Copy 这就可以了。
golang找不到定义
有些依赖CGO的package,我们引入之后你会发现他自己会找不到自己的定义,报错如下:
1
<这是go源码路径>:<这是行数> undefined: <这一版是自定义的常量啥的>
Copy 这玩意你就开启CGO试试:
1
2
sudo echo "CGOENABLED=1" >> /etc/profile
source /etc/profile
Copy