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命令到PATH
source ~/.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 myapp
build-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 int
func (s Status) MarshalJSON() ([]byte, error) {
return json.Marshal(int(s))
}
func (s *Status) UnmarshalJSON(data []byte) error {
var i int
if 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