Featured image of post linux golang开发环境部分常见问题

linux golang开发环境部分常见问题

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
source /etc/profile

go: no such tool “compile”

新环境,编译任何东西都报这个错:

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