105

私のアプリケーションでは、文字列が人間が判読できるかどうかは問題ではありません。

4

5 に答える 5

127

「一方向」のシリアライゼーション (デバッグやロギングなど) の場合fmt.Printf("%#v", var)は、非常に便利です。(更新:出力を印刷する代わりに文字列に入れるには、str := fmt.Sprintf("%#v", var).

サイズが重要な場合は を使用できますが、フィールド名と構造体型の名前も含まれるので%v気に入っています。%#v

3 番目のバリエーションは%+v、フィールド名を含めますが、構造体型は含めません。

それらはすべてfmt documentationの上部に記載されています。

双方向のシリアライゼーションが必要な場合は、JSON、Gob、または XML が Go の最も簡単な組み込みオプションです。エンコーディング パッケージを参照してください。

于 2013-05-02T07:45:06.920 に答える
114

構造体を文字列にエンコードする一般的な方法の 1 つは、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

于 2013-05-02T06:11:54.017 に答える