• 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
    收藏
    关注
    评论
  • 相关阅读:
    Codeforces Round #634 E2. Three Blocks Palindrome (hard version)(双指针/前缀和/二分/好题)
    Codeforces Round #634 D. Anti-Sudoku(构造/水)
    自动化----docker
    自动化---zabbbix监控
    awk使用
    自动化-KVM安装
    nginx教程以及正则
    自动化-cobbler
    Python
    自动化kickstart
  • 原文地址:https://www.cnblogs.com/JasonCeng/p/15134495.html
Copyright © 2020-2023  润新知