[英]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.