zoukankan      html  css  js  c++  java
  • Go基础0x02-go build -tags使用

    Go语言提供的build -tags条件编译特性,顾名思义,只有在特定条件下才会构建对应的代码。

    本文实现一个根据go bulid -tags功能来编译不同版本的做法,version参数根据tags传进来的值进行编译。

    golang

    main.go

    package main
    
    import "fmt"
    
    // HINT: You might need to move this declaration to a different file.
    // const version = "dev"
    
    func main() {
    	fmt.Printf("running %s version", version)
    }
    

    dev_config.go

    // +build dev
    
    package main
    
    var version = "DEV"
    

    上面代码的关键是// +build dev这行代码,注意这行代码前后须有一个空行隔开,例如该代码出现在第一行时,则接下来要空出一行。

    另外,这个文件只会被go bulid识别到,而go run等命令不会去识别这个文件。

    release_config.go

    // +build release
    
    package main
    
    const version = "RELEASE"
    

    代码已经准备完毕,还有一个地方要注意,需要注释掉main.go中的const version = 'dev'这行代码,否则,go bulid命令会报version重复定义。

    go build -tags测试

    执行命令如下:

    $ go build -tags dev -o dev_version
    $ ./dev_version
    running DEV version
    
    $ go build -tags release -o release_version
    $ ./release_version
    running RELEASE version
    

    go build -ldflags

    go build还支持通过命令行传递编译参数,通过-ldflags参数实现。

    $ go build -ldflags '-X main.version="dev"' -o dev_version
    
    $ ./dev_version
    running "dev" version
    

    关于tags的补充说明

    • 构建约束以一行+build开始的注释。在+build之后列出了一些条件,在这些条件成立时,该文件应包含在编译的包中;
    • 约束可以出现在任何源文件中,不限于go文件;
    • +build必须出现在package语句之前,+build注释之后应要有一个空行;
    • 多个条件之间,空格表示OR;逗号表示AND;叹号(!)表示NOT;
    • 一个文件可以有多个+build,它们之间的关系是AND。

    参考

    [1]https://www.cnblogs.com/linyihai/p/10859945.html

    [2]https://zhuanlan.zhihu.com/p/269746831

    (全文完)

    更多关于大数据、分布式、存储、区块链、Linux相关文章请关注微信公众号:asympTech渐进线实验室

    Github、知乎、博客园、CSDN、简书全网唯一id:JasonCeng

    技术人,不白嫖,如果您觉得文章对您有帮助,帮忙点个推荐吧~

    Top
    收藏
    关注
    评论
  • 相关阅读:
    poj 1860 Currency Exchange(最短路径的应用)
    poj 2965 The Pilots Brothers' refrigerator
    zoj 1827 the game of 31 (有限制的博弈论)
    poj 3295 Tautology (构造法)
    poj 1753 Flip Game(枚举)
    poj 2109 (贪心)
    poj 1328(贪心)
    Qt 对单个控件美化
    Qt 4基础
    Bash Shell
  • 原文地址:https://www.cnblogs.com/JasonCeng/p/15134495.html
Copyright © 2011-2022 走看看