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

新手上路,请多包涵

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

原文由 abw333 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 532
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="}

https://play.golang.org/p/sx-xdSxAOG

原文由 ANisus 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

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

如果您需要双向序列化 JSON、Gob 或 XML 是 Go 中最简单/内置的选项,请参阅 编码包

原文由 Ask Bjørn Hansen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题