亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在編譯時從其他包擴展地圖

在編譯時從其他包擴展地圖

Go
臨摹微笑 2023-06-05 17:16:13
我正在嘗試在“編譯時”跨包擴展地圖。這可能嗎?我有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移動到另一個可以生成的源文件。


查看完整回答
反對 回復 2023-06-05
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

您在鏈接時使用命令傳遞一個字符串

go?build?-ldflags?'-X?somemap={"k":"v"}'

然后在運行時將其解析為映射。您可以輕松使用 JSON 格式。

查看完整回答
反對 回復 2023-06-05
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

它實際上是運行時的擴展,但它應該適合您的示例。

使用初始化函數。

package B


import "A"


func init() {

? ? A.MyMap["key3"] = "value"

}


查看完整回答
反對 回復 2023-06-05
  • 3 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號