go中将字符串映射到UUID

我正在使用mitchellh/mapstructure映射从map[string]interface{}到struct


有没有办法告诉mapstructure转换string为uuid.UUID?


map[string]interface{}:

{

    "id": "af7926b1-98eb-4c96-a2ba-7e429085b2ad",

    "title": "new title",

}

struct

package entities


import (

    "github.com/google/uuid"

)


type Post struct {

    Id      uuid.UUID  `json:"id"`

    Title   string     `json:"title"`

}


不负相思意
浏览 123回答 1
1回答

慕标5832272

您可以添加一个DecodeHookFunc:func decode(input, output interface{}) error {    config := &mapstructure.DecoderConfig{        DecodeHook: mapstructure.ComposeDecodeHookFunc(            stringToUUIDHookFunc(),        ),        Result: &output,    }    decoder, err := mapstructure.NewDecoder(config)    if err != nil {        return err    }    return decoder.Decode(input)}func stringToUUIDHookFunc() mapstructure.DecodeHookFunc {    return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {        if f.Kind() != reflect.String {            return data, nil        }        if t != reflect.TypeOf(uuid.UUID{}) {            return data, nil        }        return uuid.Parse(data.(string))    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go