我正在尝试使用 json.Unmarshaler 接口将 UUID 解组为结构上的 uuid.UUID 字段。我创建了一个名为 myUUID 的自定义类型,一切正常,直到我尝试访问通常位于 uuid.UUID 上的方法。我该如何处理?我对 Go 比较陌生,所以也许我还没有完全理解自定义类型。package mainimport ( "encoding/json" "errors" "fmt" "code.google.com/p/go-uuid/uuid")var jsonstring = `{ "uuid": "273b62ad-a99d-48be-8d80-ccc55ef688b4"}`type myUUID uuid.UUIDtype Data struct { uuid myUUID}func (u *myUUID) UnmarshalJson(b []byte) error { id := uuid.Parse(string(b[:])) if id == nil { return errors.New("Could not parse UUID") } *u = myUUID(id) return nil}func main() { d := new(Data) err := json.Unmarshal([]byte(jsonstring), &d) if err != nil { fmt.Printf("%s", err) } fmt.Println(d.uuid.String())}
2 回答
蓝山帝景
TA贡献1843条经验 获得超7个赞
您可能希望确保您的myuuid变量在Data struct: 中可见/导出,就像在“public”中一样。
类型别名相同MyUUID(而不是myUUID)
type MyUUID uuid.UUID
type Data struct {
Uuid MyUUID
}
来自JSON 和 Go:
json 包仅访问结构类型的导出字段(以大写字母开头的字段)。
正如Ainar G评论的那样,风格指南还建议:
名称中的首字母缩写词或首字母缩略词(例如“ URL”或“ NATO”)具有一致的大小写。
例如,“ URL”应该显示为“ URL”或“ url”(如“ urlPony”或“ URLPony”),而不是“ Url”。这是一个例子:ServeHTTP不是ServeHttp。
ID当“标识符”是“标识符”的缩写时,此规则也适用于“ ”,因此请写“ appID”而不是“ appId”。
在您的情况下,这意味着:
type Data struct {
UUID MyUUID
}
- 2 回答
- 0 关注
- 262 浏览
添加回答
举报
0/150
提交
取消