Dictionary 在编译时从其他包扩展映射
我试图在“编译时”跨包扩展映射。这可能吗 我有一个带有预定义地图的包Dictionary 在编译时从其他包扩展映射,dictionary,go,composite-literals,Dictionary,Go,Composite Literals,我试图在“编译时”跨包扩展映射。这可能吗 我有一个带有预定义地图的包A: package A var MyMap = map[string]string{"key1": "value", "key2": "value"} 我想在“编译时”扩展映射。这应在另一个包装中完成。例如,像这样(非工作代码ofc): 这可能吗?您不能在“编译”时执行此操作。事实上,包A使用的复合文本也将在运行时构造和使用。没有复合文字常量 进一步说,无论您在包B中编写什么代码,如果它导入包A,包B的代码只会在包A初始化
A
:
package A
var MyMap = map[string]string{"key1": "value", "key2": "value"}
我想在“编译时”扩展映射。这应在另一个包装中完成。例如,像这样(非工作代码ofc):
这可能吗?您不能在“编译”时执行此操作。事实上,包A
使用的复合文本也将在运行时构造和使用。没有复合文字常量
进一步说,无论您在包B
中编写什么代码,如果它导入包A
,包B
的代码只会在包A
初始化后运行,包括您发布的地图
如果希望A.MyMap
在被任何其他包看到之前具有不同的值,则应修改包A
的源。这可能是一个生成的附加文件,它可以使用包init()
函数,为MyMap
分配新值,或向其添加新值
如果可以,还可以修改包
A
,以便将MyMap
的初始化移动到另一个可以生成的源文件。它实际上是运行时的扩展名,但应该适合您的示例
使用函数
package B
import "A"
func init() {
A.MyMap["key3"] = "value"
}
使用命令在链接时传递字符串
go build -ldflags '-X somemap={"k":"v"}'
然后在运行时将其解析为映射。您可以轻松地使用JSON格式
有关的详细信息,请参见。该设备正在运行ofc。我有意在编译时使用它:-/I尝试了init(),但在没有实际导入包的情况下调用此函数失败。我想我得想办法绕过它。这意味着
包a
的地图将在第一次与包交互时构建?或者在导入时?包A
将在任何其他包引用任何内容之前初始化。
go build -ldflags '-X somemap={"k":"v"}'