ホームページ  >  記事  >  バックエンド開発  >  Go で JSON アンマーシャリングのために UTF-8 文字列を []byte に効率的に変換するにはどうすればよいですか?

Go で JSON アンマーシャリングのために UTF-8 文字列を []byte に効率的に変換するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 21:50:02361ブラウズ

How to Efficiently Convert a UTF-8 String to []byte for JSON Unmarshalling in Go?

JSON アンマーシャリングのために UTF-8 文字列を [] バイトに変換する

Go で JSON 文字列をアンマーシャリングするには、[ ]バイトスライスを入力として使用します。 UTF-8 文字列しかない場合、それを []byte に変換するにはどうすればよいですか?

単純な変換と文字列を []byte にコピー

Go タイプシステムでは、

s := "some text"
b := []byte(s) // b is type []byte

を使用して文字列から []byte に直接変換できます。ただし、この操作では文字列のコピーが作成されるため、大きな文字列の場合は非効率的になる可能性があります。

io.Reader を使用した効率的な変換

別の解決策として、strings.NewReader():

s := `{"somekey":"somevalue"}`
r := strings.NewReader(s)

を使用して io.Reader を作成し、この io.Reader を渡すことができます。文字列のコピーを作成せずにアンマーシャリングするための json.NewDecoder() への追加:

var result interface{}
err := json.NewDecoder(r).Decode(&result)

オーバーヘッドの考慮事項

strings.NewReader() と json.NewDecoder() の使用には、多少のオーバーヘッドがあるため、小さい JSON 文字列の場合は、[]byte に直接変換する方が効率的である可能性があります。

s := `{"somekey":"somevalue"}`
var result interface{}
err := json.Unmarshal([]byte(s), &result)

Direct io.Reader Input

If the JSON string入力は io.Reader (ファイルまたはネットワーク接続など) として利用でき、json.NewDecoder():

var result interface{}
err := json.NewDecoder(myReader).Decode(&result)

に直接渡すことができます。これにより、中間の変換やコピーの必要がなくなります。

以上がGo で JSON アンマーシャリングのために UTF-8 文字列を []byte に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。