相关疑难解决方法(0)

Golang条件编译

我在Go 1中遇到条件编译问题.

这是我的测试代码.有什么我误解了"// + build"约束和"-tags"标志吗?

main1.go

// +build main1
package main

import (
    "fmt"
)

func main() {
    fmt.Println("This is main 1")
}
Run Code Online (Sandbox Code Playgroud)

main2.go

// +build main2
package main

import (
    "fmt"
)

func main() {
    fmt.Println("This is main 2")
}
Run Code Online (Sandbox Code Playgroud)

当运行"go build"时,我仍然遇到编译错误

$ go build -tags 'main1'
# test
./main2.go:8: main redeclared in this block
        previous declaration at ./main1.go:8
Run Code Online (Sandbox Code Playgroud)

go

45
推荐指数
5
解决办法
2万
查看次数

如何正确使用构建标签?

我需要能够构建一个go应​​用程序的不同版本; 'debug'版本和普通版本.

这很容易做到; 我只是有一个const DEBUG,它控制着应用程序的行为,但是每次我需要在构建类型之间进行交换时都必须编辑配置文件.

我正在阅读关于go build(http://golang.org/pkg/go/build/)和标签,我想也许我可以这样做:

config.go:

// +build !debug
package build
const DEBUG = false
Run Code Online (Sandbox Code Playgroud)

config.debug.go:

// +build debug
package build
const DEBUG = true
Run Code Online (Sandbox Code Playgroud)

然后我应该能够使用"go build"或"go build -tags debug"进行构建,标签应该排除config.go并包含config.debug.go.

......但这不起作用.我明白了:

src/build/config.go:3:DEBUG在此块(<0>)中重新声明src/build/config.debug.go上的声明:3

我究竟做错了什么?

是否有其他更合适的#ifdef风格的方式我应该使用?

build go

26
推荐指数
2
解决办法
2万
查看次数

用多个标签构建

正如所看到这里,去构建一个接受"标签"标志,将包括被"标记",文件即

// +build foo

package main

....
Run Code Online (Sandbox Code Playgroud)

将被排除在外

go build
Run Code Online (Sandbox Code Playgroud)

但包括在内

go build -tags=foo
Run Code Online (Sandbox Code Playgroud)

有没有办法包含多个标签?即

go build -tags=foo && bar
Run Code Online (Sandbox Code Playgroud)

tags build go

10
推荐指数
2
解决办法
2957
查看次数

标签 统计

go ×3

build ×2

tags ×1