私のアプリケーションでは、文字列が人間が読めるかどうかは関係ありません。Goでは、構造体の文字列表現をどのように取得できますか?
答えて
構造体を文字列にエンコードする一般的な方法の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="}
まさに私が必要なもの!あなたに+1 – abw333
私はあなたに2番目の質問とあなたの目的が気づいた。 JSONは便利ですが、出力文字列を使用して同等性をテストするハッシュを作成する場合は使用できません。 Askが言いましたように、あなたはマップに問題があります。これは 'fmt.Sprintf'も使用します。 – ANisus
JSONで表示するためにキーを大文字にする必要があることを知らなかった。 – jiyinyiyong
それは(デバッグやロギングまたは何のために) "一方通行" 連載だ場合、fmt.Printf("%#v", var)
は非常にありますいいね(更新:。それを印刷するのではなく、文字列に出力を置くために、サイズの問題は、あなたが%v
を使用できる場合
をstr := fmt.Sprintf("%#v", var)
を使用しますが、それはまた、フィールド名と構造体型の名前が含まれますので、私は%#v
が好き。
第三変化はフィールド名が含まれます%+v
ではなく、構造体型。彼らはすべてのfmt documentation。
の上部に記載されています
あなたは双方向のシリアル化JSONが必要な場合は、ゴブr XMLはGoの最も簡単な/組み込みのオプションです。encoding packagesを参照してください。
お返事ありがとうございます。私はおそらく私の質問で私のプログラムではなく、コンソールの価値を得るために探している必要があります指定する必要があります。特に、私はバイト配列に文字列を変換したいと思います。私が "[] byte(fmt.Printf("%v "、var))" "を実行すると、プログラムは"単一値のコンテキストで複数値のfmt.Printf() "について文句を言います。 Printfは文字列の値を返さないので、これをコンソールに出力するだけなので、これを仮定しています。あなたはこれを解決する方法を知っていますか? – abw333
私はANisusの応答を使ってこれを行う方法を理解しましたが、良い答えのためにあなたに+1します。 – abw333
プログラムで必要な場合は、Printfの代わりに 'fmt.Sprintf'を使います。 JSONを使用している場合は、マップ値が各実行で同じ順序で返されないことに注意してください(fmt printfの場合もそうですが、私はチェックしていません)。 –
構造体をシリアル化しようとしていますか?あなたは本当にそれにゴブを使用すべきです。 – rmmh