[英]how to implement macros in Go?
我在 C++ 中完成了项目,我使用#define
宏给项目命名,我在几个地方使用过,我不经常更改此名称,但有时我可能需要更改此名称,然后我更改此宏并重建我的代码。 现在我正在将此代码转换为 Go。 有人可以建议我如何在 Go 中实现它吗? 我对为此目的使用全局变量不感兴趣,因为我有很多这样的宏,我怀疑这会导致我的项目占用更多 cpu 并影响性能。
幸运的是,Go 不支持宏。
Go 中有两个地方可以实现使用其他编程语言中的宏所做的事情:
看来,后者才是你所追求的。
不幸的是,此功能的帮助本身几乎无法发现,但它在输出中进行了解释
$ go tool link -help
从中引用相关位:
-X definition
添加表单
importpath.name=value
字符串值definition
所以你像这样滚动:
在任何方便的包中,您可以定义一个字符串常量,您希望在构建时更改其值。
假设您在包foo
定义了常量Bar
。
您可以在编译时为链接阶段的go build
或go install
调用传递一个特殊标志:
$ go install -ldflags='-X foo.Bar="my super cool string"'
结果,生成的二进制文件将在其“只读数据”段中将常量foo.Bar
设置为值“我的超酷字符串”,该值将被程序代码使用。
另请参阅有关-ldflags
选项的go help build
输出。
Go 不支持Macros
。
但是您可以在包中使用常量并在需要时引用它。
package constant
// constants.go file
const (
ProjectName = "My Project"
Title = "Awesome Title"
)
在你的程序中
package main
import "<path to project>/constant" // replace the path to project with your path from GOPATH
func main() {
fmt.Println(constant.ProjectName)
}
项目结构将是
project
|- constant
| |- constants.go
|-main.go
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.