Golang相当于pythons __getattr __()或__call __()

Bnd*_*ndr 2 python generics dynamic go

我想在运行时操作结构.

例如,我有一个结构:

type Item struct {
 SomeField string
}
Run Code Online (Sandbox Code Playgroud)

是否可以在运行时添加字段?或尚未定义的访问属性.像pythons __getattr__() or __call__(这样的东西)所以我可以动态控制访问的字段/方法.

例如,做一些 Item.DynamicField or Item.DynamicMethod()我不完全知道将要访问/调用的字段或方法的地方,所以我无法静态定义它.

也许我在Reflect包中遗漏了一些东西?

谢谢.

war*_*iuc 8

https://github.com/oleiade/reflections

反射包的目的是让开发人员在运行时内省结构时更加轻松。它的 API 受到 python 语言的启发(getattrsetattrhasattr...),并提供对结构字段和标签的简化访问。


Den*_*ret 7

是否可以在运行时添加字段?或尚未定义的访问属性.

不是.Go是一种具有静态定义类型的编译语言.如果要动态添加属性,则可能需要地图.

  • 那是什么意思 ?您可以预先处理您的代码以增强它当然,并且Go包含静态分析和转换工具,但很明显您正面临[xy问题](http://meta.stackexchange.com/questions/66377/what-是最XY-问题). (4认同)