为了账号安全,请及时绑定邮箱和手机立即绑定

将 JSON 解组为 UUID 类型

将 JSON 解组为 UUID 类型

Go
慕尼黑的夜晚无繁华 2021-08-10 13:30:16
我正在尝试使用 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

}


查看完整回答
反对 回复 2021-08-10
  • 2 回答
  • 0 关注
  • 262 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信