3 回答
TA贡献1874条经验 获得超12个赞
不,你不能在 Go 中对这样的东西进行猴子补丁。结构在编译时定义,您不能在运行时添加字段。
我可以通过继承来解决这个问题(...)
不,你不能,因为 Go 中没有继承。您可以通过组合解决它:
type FooWithFlag struct {
Foo
Flag bool
}
TA贡献1816条经验 获得超6个赞
你总是可以定义一个自定义Marshaler/Unmarshaler接口并在你的类型中处理它:
type X struct {
b bool
}
func (x *X) MarshalJSON() ([]byte, error) {
out := map[string]interface{}{
"b": x.b,
}
if x.b {
out["other-custom-field"] = "42"
}
return json.Marshal(out)
}
func (x *X) UnmarshalJSON(b []byte) (err error) {
var m map[string]interface{}
if err = json.Unmarshal(b, &m); err != nil {
return
}
x.b, _ = m["b"].(bool)
if x.b {
if v, ok := m["other-custom-field"].(string); ok {
log.Printf("got a super secret value: %s", v)
}
}
return
}
- 3 回答
- 0 关注
- 152 浏览
添加回答
举报