Go Pkg 编译介绍

发布时间: 更新时间: 总字数:527 阅读时间:2m 作者: 分享 复制网址

Golang 支持交叉编译,即在一个平台编译,在另一个平台运行,本文介绍Golang Pkg 编译相关。

使用

go build 在其他目录执行需要指定包名,在main下不需要

go build -a -x [pkgname|...]

其中:

  • -a 全部重新编译
  • -x 显示编译过程

go build ./... 编译当前目录下所有的源文件,如果启用Go Modules,执行 go build 会把依赖写入 go.mod

参数说明

  • GOOS: 目标平台
    • mac : darwin
    • linux : linux
    • windows : windows
  • GOARCH :目标平台的体系架构
    • 386 也称 x86 : 32位操作系统
    • amd64 也称 x64 : 64位操作系统,比如电脑一般都是amd64架构的
    • arm 一般用于嵌入式开发,比如Android,IOS,Win mobile等
  • 交叉编译不支持CGO_ENABLED,使用CGO_ENABLED=0设置。

编译命令

  • 编译在Linux运行的包
CGO_ENABLED=0  GOOS=linux  GOARCH=amd64  go  build
  • 编译在Mac运行的包
CGO_ENABLED=0  GOOS=darwin  GOARCH=amd64  go  build
  • 编译在Windows运行的包
CGO_ENABLED=0  GOOS=windows  GOARCH=amd64  go  build

# 若是在windows编译,也可以采用如下命令设置变量:
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build

go build tag

使用 go bulid -tag 用来自定义构建配置不同的版本,参考

指定tags编译

  • dev_info.go
// +build dev

package main

var version = "DEV"
  • release_info.go
// +build release

package main

var version = "RELEASE"
  • main.go
package main

import "fmt"

func main() {
	fmt.Printf("running %s version", version)
}
  • 编译不同的版本
go build -tags dev -o main-dev
go build -tags release -o main-release

传参编译

  • main.go
package main

import "fmt"

var version string

func main() {
	fmt.Printf("running %s version", version)
}
  • 编译
go build -ldflags '-X main.version="dev"' -o main-dev

go e2e

end2end test 可以通过如下控制,可以使用 go test -tags e2e 运行比较费时的测试,而不加时不允许该测试

//go:build e2e
// +build e2e
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数