当前位置: 首页 > 面试题库 >

Golang条件编译

厍华清
2023-03-14
问题内容

我在Go 1中使用条件编译遇到了麻烦。

这是我的测试代码。关于“ // + build”约束和“ -tags”标志,我有什么误解吗?

main1.go

// +build main1
package main

import (
    "fmt"
)

func main() {
    fmt.Println("This is main 1")
}

main2.go

// +build main2
package main

import (
    "fmt"
)

func main() {
    fmt.Println("This is main 2")
}

运行“执行构建”时,我仍然出现编译错误

$ go build -tags 'main1'
# test
./main2.go:8: main redeclared in this block
        previous declaration at ./main1.go:8

问题答案:

您必须跟随// +build XXX一个空白行。

在我的简短搜索中,找不到该文件的记录位置/位置。但消息人士明确指出



 类似资料:
  • Rust 有一个特殊的属性,#[cfg],它允许你基于一个传递给编译器的标记编译代码。它有两种形式: #[cfg(foo)] # fn foo() {} #[cfg(bar = "baz")] # fn bar() {} 它还有一些帮助选项: #[cfg(any(unix, windows))] # fn foo() {} #[cfg(all(unix, target_pointer_wid

  • 编译器有一个定义符号列表,定义符号可以通过 !define 定义或使用 /D 命令行开关。这些定义符号可以用于条件编译 (通过 !ifdef 定义) 或用于符号替换 (一种格式简单的宏)。若要用它的值替换一个符号,请使用 ${符号} (如果没有定义符号,那么不会产生转换)。这个转换为“先到先得”,这意味着如果你做了: !define 符号1 ${符号2} 当出现该行时,如果定义了“符号2”它将

  • 条件编译在处理机器依赖、调试以及编译阶段设定特定选项时十分有用。不过要小心条件编译。各种控制很容易以一种无法预料的方式结合在一起。如果使用#ifdef判断机器依赖,请确保当没有机器类型适配时,返回一个错误,而不是使用默认机器类型(使用#error并缩进一级,这样它可以一些老旧的编译器下工作)。如果你#ifdef优化选项,默认情况下应该是一个未经优化的代码,而不是一个不兼容的程序。确保测试的是未经优

  • 问题内容: 我有一个在j2me项目和android项目中引用的java项目。在这个项目中,我想使用条件编译。 就像是… 我一直在阅读有关此内容的信息,但没有发现任何有用的信息。 问题答案: 您可以使用Antenna(有一个Eclipse插件,您可以将其与Ant构建系统一起使用)。我正在按照您描述的方式在我的项目中使用它,并且效果很好:) 编辑:这是与@ WhiteFang34解决方案相关的示例,是

  • 条件编译是选择要编译的代码和不编译的代码的过程,类似于C和C ++中的#if/#else/#endif。 任何未编译的语句仍必须在语法上正确。 条件编译涉及在编译时可评估的条件检查。 像if,for,while这样的运行时条件语句不是条件编译功能。 D的以下特征适用于条件编译 - debug version static if D中的调试声明 debug在程序开发期间很有用。 仅当启用了-debu

  • 问题内容: 我试图写一个围棋包装用CGO的ENET。 当我尝试在Mac上编译包装程序时,该库较旧,并且界面略有不同。99%的代码是相同的,只需要更改几个C调用即可。 在Go中处理此类问题的最佳实践是什么? 有什么方法可以进行条件编译或条件导入吗? 问题答案: Go没有条件编译或条件导入。处理C代码中的类型差异。 [Go]作者是否反对预处理?