1 回答

TA贡献2036条经验 获得超8个赞
与其自定义编解码器,不如A为公钥创建自定义类型并使用 Base64 对其值进行编码/解码
type PubKey []byte
func (pk PubKey) MarshalYAML() (interface{}, error) {
return base64.StdEncoding.EncodeToString(pk), nil
}
func (pk *PubKey) UnmarshalYAML(node *yaml.Node) error {
value := node.Value
ba, err := base64.StdEncoding.DecodeString(value)
if err != nil {
return err
}
*pk = ba
return nil
}
type A struct {
PublicKey PubKey `json:"PublicKey" yaml:"PublicKey"`
}
// No custom YAML codec
编码/解码是这样的:
func PublicKey() {
token := []byte{87, 88, 89, 90}
a := A{PublicKey: token}
fmt.Printf("A: %+v\nA.PublicKey:%s\n\n", a, a.PublicKey)
out, _ := yaml.Marshal(a)
fmt.Println("Encoded: ", string(out))
var b A
err := yaml.Unmarshal(out, &b)
if err != nil {
println(err)
}
fmt.Printf("after decoding: %+v\n", b)
}
完整示例https://go.dev/play/p/2_gMi9sazIp
结果是:
A: {PublicKey:[87 88 89 90]}
A.PublicKey:WXYZ
Encoded: PublicKey: V1hZWg==
after decoding: {PublicKey:[87 88 89 90]}
顺便说一句,base64 是编解码器如何json编组字节切片 示例与您的数据:https://go.dev/play/p/dGr0i0DnnNX
A: {PublicKey:[87 88 89 90]}
A.PublicKey:WXYZ
Encoded JSON: {"PublicKey":"V1hZWg=="}
after decoding JSON: {PublicKey:[87 88 89 90]}
- 1 回答
- 0 关注
- 232 浏览
添加回答
举报