如何在 Go 的 YAML 中将字节数组呈现为字符串?

我有一个以字节数组作为字段的结构。这是代码:


package main


import (

    "fmt"


    "gopkg.in/yaml.v3"

)


type A struct {

    PublicKey []byte `json:"PublicKey" yaml:"PublicKey"`

}


// Implements the Marshaler interface of the yaml pkg.

func (a A) MarshalYAML() (interface{}, error) {

    type alias A


    node := yaml.Node{}

    _ = node.Encode(alias(a))


    return node, nil

}


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(string(out))

}


func main() {

    PublicKey()

}


这是输出:


A: {PublicKey:[87 88 89 90]}

A.PublicKey:WXYZ


PublicKey:

    - 87

    - 88

    - 89

    - 90

是否可以让 marshal-er 将其输出为字符串而不是字节数组?例如:


PublicKey: WXYZ


皈依舞
浏览 233回答 1
1回答

慕桂英3389331

与其自定义编解码器,不如A为公钥创建自定义类型并使用 Base64 对其值进行编码/解码type PubKey []bytefunc (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:WXYZEncoded:  PublicKey: V1hZWg==after decoding: {PublicKey:[87 88 89 90]}顺便说一句,base64 是编解码器如何json编组字节切片 示例与您的数据:https://go.dev/play/p/dGr0i0DnnNXA: {PublicKey:[87 88 89 90]}A.PublicKey:WXYZEncoded JSON:  {"PublicKey":"V1hZWg=="}after decoding JSON: {PublicKey:[87 88 89 90]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go