猿问

将 JSON 解组为 UUID 类型

我正在尝试使用 json.Unmarshaler 接口将 UUID 解组为结构上的 uuid.UUID 字段。我创建了一个名为 myUUID 的自定义类型,一切正常,直到我尝试访问通常位于 uuid.UUID 上的方法。我该如何处理?我对 Go 比较陌生,所以也许我还没有完全理解自定义类型。


package main


import (

    "encoding/json"

    "errors"

    "fmt"


    "code.google.com/p/go-uuid/uuid"

)


var jsonstring = `

{

    "uuid": "273b62ad-a99d-48be-8d80-ccc55ef688b4"

}

`


type myUUID uuid.UUID


type 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())

}


慕尼黑的夜晚无繁华
浏览 263回答 2
2回答

蓝山帝景

您可能希望确保您的myuuid变量在Data struct: 中可见/导出,就像在“public”中一样。类型别名相同MyUUID(而不是myUUID)type MyUUID uuid.UUIDtype 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}
随时随地看视频慕课网APP

相关分类

Go
我要回答