在Ubuntu上打包Golang程序需根据目标场景选择合适方式,以下是常见方法及要点:
安装Golang
通过apt安装(推荐,自动配置环境变量):
sudo apt update && sudo apt install golang-go
验证安装:go version。
编写Go程序
创建.go文件(如hello.go),示例代码:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
编译为可执行文件
go build -o myapp hello.go
CGO_ENABLED=0 go build -o myapp hello.go
(适用于无C库依赖的场景,生成更小的二进制文件)。编写导出函数
在Go代码中添加//export注释并导入C包:
package main
import "C"
//export Add
func Add(a, b int) int {
return a + b
}
func main() {} // 必须保留空main函数
编译静态库
CGO_ENABLED=1 go build -o libmylib.a -buildmode=c-archive main.go
生成libmylib.a文件,可在C/C++项目中通过#include "main.h"调用。
编写导出函数
使用//export注释并确保函数以大写字母开头:
package mylib
//export Multiply
func Multiply(a, b int) int {
return a * b
}
编译动态库
go build -o libmylib.so -buildmode=c-shared main.go
生成libmylib.so文件,其他Go程序可通过import "C"加载。
使用go mod管理依赖
go mod init myappgo mod tidy。打包为Docker镜像(跨平台部署)
创建Dockerfile:
FROM golang:1.23-alpine
WORKDIR /app
COPY . .
RUN go build -o myapp .
CMD ["./myapp"]
构建镜像:docker build -t myapp .,运行:docker run myapp。
permission denied错误。GOOS=linux GOARCH=amd64)。根据实际需求选择打包方式,基础场景推荐直接使用go build,复杂场景可结合静态库或Docker实现。