Ubuntu Golang打包常见问题及解决方案

go mod init <module-name>),自动记录依赖到go.mod文件;通过go get -u ./...添加缺失依赖;go mod tidy清理未使用的依赖并同步go.sum文件。GO111MODULE=on(启用模块支持),避免依赖路径解析错误。~/.bashrc文件,添加以下内容(根据实际安装路径调整):export GOROOT=/usr/local/go# Go安装路径export GOPATH=$HOME/go # 依赖存放路径export PATH=$PATH:$GOROOT/bin:$GOPATH/bin# 添加Go命令到PATHsource ~/.bashrc使设置生效。GOOS=linux GOARCH=amd64 go build -o myappGOOS=windows GOARCH=amd64 go build -o myapp.exeGOOS=linux GOARCH=arm go build -o myapp-arm。libc.so)缺失。CGO_ENABLED=0,生成静态链接的二进制文件(无需外部C库):CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myappbuild-essential:sudo apt install build-essential)。chmod命令添加执行权限:chmod +x myapp./myapp运行(需当前目录在PATH中)。make初始化,例如var s []int应改为s := make([]int, 0)。make初始化,例如var m map[string]int应改为m := make(map[string]int)。[]byte修改后再转回:x := "text"xBytes := []byte(x)xBytes[0] = 'T'x = string(xBytes)"id": 123)解码后变为float64类型,导致精度丢失或后续操作错误。json.Marshaler/json.Unmarshaler接口:type Status intfunc (s Status) MarshalJSON() ([]byte, error) {return json.Marshal(int(s))}func (s *Status) UnmarshalJSON(data []byte) error {var i intif err := json.Unmarshal(data, &i); err != nil {return err}*s = Status(i)return nil}defer函数中使用recover,例如:defer func() {if r := recover(); r != nil {fmt.Println("Recovered from panic:", r)}}()panic("something went wrong")apt install golang安装的版本过旧(如低于1.18),导致Dockerfile中any关键字报错(Go 1.18+引入)。apt安装,手动下载Golang二进制包:RUN wget https://mirrors.aliyun.com/golang/go1.21.3.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz && rm go1.21.3.linux-amd64.tar.gz && export PATH=$PATH:/usr/local/go/bin