Golang中__getattr__()或__call__()的等价物是什么

4 投票
2 回答
5030 浏览
提问于 2025-04-18 10:23

我想在运行时操作结构体。

比如,我有一个结构体:

type Item struct {
 SomeField string
}

在运行时能不能添加字段?或者访问一些还没有定义的属性?就像Python里的 __getattr__()__call__(),这样我就可以动态控制访问的字段或方法。

例如,像这样做 Item.DynamicFieldItem.DynamicMethod(),我并不知道具体会访问或调用哪个字段或方法,所以我不能静态地定义它。

也许我在Reflect包里漏掉了什么?

谢谢。

2 个回答

8

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

不可以。Go是一种编译语言,类型是静态定义的。如果你想动态添加属性,可能需要使用映射(map)

8

https://github.com/oleiade/reflections

reflections这个包的目的是为了让开发者在运行程序时更轻松地查看和检查数据结构。它的使用方式受到了Python语言的启发,比如有一些函数叫做getattrsetattrhasattr等。这个包提供了一种更简单的方法来访问数据结构中的字段和标签。

撰写回答