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 關注
- 219 瀏覽
添加回答
舉報