【发布时间】:2023-04-10 17:12:01
【问题描述】:
我有一个枚举定义为
type MyEnum int
const(
FirstEnum MyEnum = iota
)
然后,我有一个包含键值对 "Key": "FirstEnum" 的 json。我是这样解组的。
var data map[string]interface{}
err := json.Unmarshal([]byte(json), &data)
x := data["key"].(MyEnum)
但是,当我运行它时,我得到了错误:
panic: interface conversion: interface {} is string, not ps.Protocol [recovered]
panic: interface conversion: interface {} is string, not ps.Protocol
有没有办法让它像在 Go 中将枚举的字符串表示形式正常转换为枚举类型一样工作?
【问题讨论】:
-
首先,这根本不适用于
interface{},因为解组器随后会将其解组为默认类型的字符串。所以你需要一个结构。然后你需要编写一个自定义的UnmarshalJSON函数来为你处理事情。 -
这听起来像是很多工作...... go 如何处理将 json 解组为自定义类型?总是需要编写自定义解组器?
-
阅读文档即可。声明一个结构,创建一个指向结构实例的指针,然后直接在
Unmarshal中使用它 -
您并不总是需要编写自定义解组器。仅当您需要自定义行为时。
标签: json go enums unmarshalling