web-dev-qa-db-ja.com

Golang文字列をio.Writerに変換しますか?

Golangでstringを_io.Writer_型に変換できますか?

fmt.Fprintf()でこの文字列を使用しますが、型を変換できません。

21
Acidic

Goのstringに書き込むことはできません。stringは不変です。

最適な代替手段は bytes.Buffer であり、Go 1.10以降ではより高速な strings.Builder タイプです。これらは実装します io.Writer =したがって、それらに書き込むことができ、その内容をstringとして Buffer.String() および Builder.String() として、または Buffer.Bytes() のバイトスライス。

bytes.NewBufferString() でバッファを作成する場合、stringをバッファの初期コンテンツとして使用することもできます。

s := "Hello"
buf := bytes.NewBufferString(s)
fmt.Fprint(buf, ", World!")
fmt.Println(buf.String())

出力( Go Playground で試してください):

Hello, World!

タイプstring(またはstringタイプの任意の値)の変数を追加する場合は、単に Buffer.WriteString() (または Builder.WriteString() ):

s2 := "to be appended"
buf.WriteString(s2)

または:

fmt.Fprint(buf, s2)

また、2つのstringsを連結するだけの場合、バッファを作成して fmt.Fprintf() を使用する必要はなく、単に+を使用できます。それらを連結する演算子:

s := "Hello"
s2 := ", World!"

s3 := s + s2  // "Hello, World!"

次も参照してください: Golang:印刷せずに文字列をフォーマットしますか?

興味深いかもしれません: ResponseWriter.Writeとio.WriteStringの違いは何ですか?

58
icza