美文网首页
编译go项目

编译go项目

作者: wayyyy | 来源:发表于2022-11-25 16:04 被阅读0次

    go build 常见编译选项:

    参数 说明
    -o 可执行文件名
    -a 强制重新编译所有包
    -p 并行编译所使用的CPU核数量
    -v 显示待编译包名字
    -n 仅显示编译命令,但不执行
    -x 显示正在执行的编译命令
    -work 显示临时工作目录,完成后不删除
    -race 启动数据竞争检查
    -gcflags 编译器参数
    -ldflags 链接器参数
    • gcflags 常见参数有:

      参数 说明
      -B 禁用越界检查
      -N 禁用优化
      -l 禁用内联
      -u 禁用unsafe
      -S 输出汇编代码
      -m 输出优化信息
    • ldflags 常见参数有:

      参数 说明
      -s 禁用符号表
      -w 禁用DRAWF调试信息
      -X 设置字符串全局变量值
      -H 设置可执行文件格式
    禁止编译优化
    go build -gcflags "all=-N -l"  -o main.exe main.go
    
    -ldflags -s -w 去掉符号表和调试信息
    go build -ldflags -s -w -o main.exe main.go
    
    利用-ldflags -X设置字符串全局变量值

    发版时,我们需要一个信息版本号,如果每次人工修改,容易遗忘。而go 在编译时允许注入一个变量进去。

    package main
    
    import (
        "fmt"
    )
    
    var MinVersion string
    
    func main() {
        fmt.Println(fmt.Sprintf(publish: %s", MinVersion))
    }
    

    如下命令编译:

    go build -ldflags "-X 'main.MinVersion=1.0.0.1'" -o main.exe main.go
    

    执行输出:


    image.png

    我们可以将代码提交ID作为在Makefile 中写入进去,这样就不用每次修改版本号了。

    通过 go bulid -tags 实现编译控制

    TODO

    相关文章

      网友评论

          本文标题:编译go项目

          本文链接:https://www.haomeiwen.com/subject/nwgffdtx.html