go build

作者: 个00个 | 来源:发表于2019-05-05 14:32 被阅读0次

    golang中的 +build

    参考下这波文章 https://studygolang.com/articles/919
    官方文档 https://golang.org/pkg/go/build/#hdr-Build_Constraints

    // +build linux,windows   // ‘,’ 为且的关系 这一条就冲突了一定不会被编译
    // +build linux windows   // ‘ ’ 为或的关系 这一条就会被编译
    
    // +build !ssd,linux windows
    // +build windows                          // 如果有多行的话, 多行之间为 且的关系
    

    除了操作系统 & 处理器架构的还有自定义的 。

    // +build ignore

    #testadd.go
    
    // +build ignore
    
    package add
    
    func Add(a, b int) int {
        return a + b
    }
    
    
    #test.go
    
    package main
    
    import (
        "fmt"
        "shenshida.com/hello/test/testadd"
    )
    
    func main() {
        c := add.Add(1, 2)
        fmt.Println(c)
    }
    
    

    可以发现报编译错误。 这是因为编译被忽略了,
    被忽略的原因就是 doesnt match to target system .
    ignore 这是一个约定的忽略, 好多源码或者其他中遵循了这一约定

    [work@testphp test]$ go build test.go 
    test.go:5:2: build constraints exclude all Go files in /home/work/workspace/Go/src/shenshida.com/hello/test/testadd
    

    我们可以把tag换成一个我们自己的自定义的

    // +build testadd

    #testadd.go
    
    // +build testadd
    
    package add
    
    func Add(a, b int) int {
        return a + b
    }
    

    同样是无法编译的。 这时候我们可以利用go build 的 -i 参数中的 build flags 来编译成功

    go build -i -tags 'testadd' test.go

    就可以编译成功了 。

    如果有多个 需要用 空格 隔开 这样就可以编译成功了 。 这个就成功的帮我

    go build -i -tags 'testadd testminus' test.go


    1. 还有一种情况, 如果有两个文件名不同但是函数名相同的函数。
    #testadd.go
    package add
    
    func Add(a, b int) int {
        return a + b
    }
    
    #testadd_ssd.go
    
    // +build ssd
    
    package add
    
    func Add(a, b int) int {
        return a + b + 1
    }
    
    
    # shenshida.com/hello/test/testadd
    testadd/testadd_ssd.go:6:6: Add redeclared in this block
            previous declaration at testadd/testadd.go:3:20
    
    # 惨兮兮的重复定义了。 那要怎么才能编译呢 。
    

    需要修改 testadd.go 的文件. !ssd 《= 这样就不会包含了。

    // +build !ssd            
    
    package add
    
    func Add(a, b int) int {
        return a + b
    }
    
    

    相关文章

      网友评论

          本文标题:go build

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