gpt4 book ai didi

go - json.Unmarshal 到具有自定义类型的映射与到结构或 slice 中的不一致行为

转载 作者:行者123 更新时间:2023-12-05 05:38:10 25 4
gpt4 key购买 nike

我有一个自定义类型,它应该是一个枚举器,它实现了 json.Unmarshaler。

当我解编成一个slice 或这种类型的struct 时,它会起作用,例如https://go.dev/play/p/DGg3nzo_VwN

当我解码为包含此类型的映射 时,它会中断,如https://go.dev/play/p/YGgnRvr0agz

通过源代码(go 1.18)爬取,我知道如何让它工作,只需实现encoding.TextUnmarshaler,如https://go.dev/play/p/vY4E4snAY52我还了解了代码如何用于 map :它检查是否实现了 encoding.TextUnmarshaler,如果是,在尝试 UnmarshalText 之前调用它的 UnmarshalJSON >。换句话说,UnmarshalText 必须存在,但是如果 UnmarshalJSON 也存在,它将被忽略。

为什么是这个优先级?为什么只有 map 以这种方式处理?

最佳答案

来自 Go 的 decoder :

// Map key must either have string kind, have an integer kind,
// or be an encoding.TextUnmarshaler.

所以你必须实现 TextUnmarshaller。

关于go - json.Unmarshal 到具有自定义类型的映射与到结构或 slice 中的不一致行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72997625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com