我正在嘗試在“編譯時”跨包擴展地圖。這可能嗎?我有A一個帶有預定義地圖的包:package Avar MyMap = map[string]string{"key1": "value", "key2": "value"}我想在“編譯時”期間擴展地圖。這將在另一個包中完成。例如像這樣(不是工作代碼 ofc。):package Bimport "A"A.MyMap.Slice1["key3"] = "value" // extend the map during compile time這有可能嗎?
3 回答

藍山帝景
TA貢獻1843條經驗 獲得超7個贊
您不能在“編譯”時執行此操作。事實上,package A
使用的復合文字,也將在運行時構造和使用。沒有復合文字常量。
更進一步,無論您在 package 中編寫什么代碼B
,如果它導入 package A
, package 的代碼B
只會在 packageA
初始化后運行,包括您發布的地圖。
如果你想A.MyMap
在任何其他包看到它之前有一個不同的值,你應該修改包的源A
。這可能是生成的附加文件,它可以使用包init()
函數,為 分配新值MyMap
,或向其添加新值。
如果可以,您還可以修改 packageA
以便將 的初始化MyMap
移動到另一個可以生成的源文件。

白板的微信
TA貢獻1883條經驗 獲得超3個贊
您在鏈接時使用命令傳遞一個字符串
go?build?-ldflags?'-X?somemap={"k":"v"}'
然后在運行時將其解析為映射。您可以輕松使用 JSON 格式。

青春有我
TA貢獻1784條經驗 獲得超8個贊
它實際上是運行時的擴展,但它應該適合您的示例。
使用初始化函數。
package B
import "A"
func init() {
? ? A.MyMap["key3"] = "value"
}
- 3 回答
- 0 關注
- 157 瀏覽
添加回答
舉報
0/150
提交
取消