我正在尝试在“编译时”跨包扩展地图。这可能吗?我有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 关注
- 115 浏览
添加回答
举报
0/150
提交
取消