在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 myapp
go 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实现。