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
|
原因是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
|
然后再载入一下这个配置:
新环境,编译任何东西都报这个错:
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"
|
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'
|
再看看GOROOT/srv/go
,果然空空如也,那就简单了:
1
2
|
sudo cp $GOPATH/pkg $GOROOT
sudo cp $GOPATH/src $GOROOT
|
这就可以了。
golang找不到定义
有些依赖CGO的package,我们引入之后你会发现他自己会找不到自己的定义,报错如下:
1
|
<这是go源码路径>:<这是行数> undefined: <这一版是自定义的常量啥的>
|
这玩意你就开启CGO试试:
1
2
|
sudo echo "CGOENABLED=1" >> /etc/profile
source /etc/profile
|