一尘不染

如何获取结构的字符串表示形式?

go

对于我的应用程序,字符串是否是人类可读的并不重要。


阅读 186

收藏
2021-12-03

共2个答案

一尘不染

将结构编码为字符串的一种流行方法是使用JSON

您有某些限制,例如无法获取所有信息(例如每个字段的特定类型)、仅序列化导出的字段以及不处理递归值。但它是序列化数据的简单标准方式。

工作示例:

package main

import (
    "fmt"
    "encoding/json"
)

type s struct {
    Int       int
    String    string
    ByteSlice []byte
}

func main() {
    a := &s{42, "Hello World!", []byte{0,1,2,3,4}}

    out, err := json.Marshal(a)
    if err != nil {
        panic (err)
    }

    fmt.Println(string(out))
}

给出这个输出:

{"Int":42,"String":"Hello World!","ByteSlice":"AAECAwQ="}
2021-12-03
一尘不染

如果它是“单向”序列化(用于调试或日志记录或其他),那么fmt.Printf(“%#v”, var)非常好。(更新:要将输出放入字符串而不是打印它,请使用str := fmt.Sprintf(“%#v”, var).

如果大小很重要,您可以使用%v,但我喜欢,%#v因为它还将包括字段名称和结构类型的名称。

第三种变体%+v将包括字段名称,但不包括结构类型。

它们都记录在fmt 文档的顶部。

如果您需要双向序列化 JSON,Gob 或 XML 是 Go 中最简单/内置的选项

2021-12-03