2 回答
TA贡献1815条经验 获得超10个赞
我同意小声音告诉您使用“子类别”而不是尝试处理不一致的类型。此外,您应该结合游泳中的“男子”和“女子”子类别,类似于在网球和田径中的做法。这将使您更好地利用 encoding/json(和 mgo/bson 的)映射功能,但我不会称其为“后端语言”问题 - 一致的数据类型也应该使您的 js(和其他客户端代码)更好!
TA贡献2080条经验 获得超4个赞
你可以使用json.RawMessage:
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
type Color struct {
Space string
Point json.RawMessage // delay parsing until we know the color space
}
type RGB struct {
R uint8
G uint8
B uint8
}
type YCbCr struct {
Y uint8
Cb int8
Cr int8
}
var j = []byte(`[
{"Space": "YCbCr", "Point": {"Y": 255, "Cb": 0, "Cr": -10}},
{"Space": "RGB", "Point": {"R": 98, "G": 218, "B": 255}}
]`)
var colors []Color
err := json.Unmarshal(j, &colors)
if err != nil {
log.Fatalln("error:", err)
}
for _, c := range colors {
var dst interface{}
switch c.Space {
case "RGB":
dst = new(RGB)
case "YCbCr":
dst = new(YCbCr)
}
err := json.Unmarshal(c.Point, dst)
if err != nil {
log.Fatalln("error:", err)
}
fmt.Println(c.Space, dst)
}
}
- 2 回答
- 0 关注
- 190 浏览
添加回答
举报