Go では、a はstring
プリミティブ型です。つまり、読み取り専用であり、それを操作するたびに新しい文字列が作成されます。
結果の文字列の長さを知らずに文字列を何度も連結したい場合、最適な方法は何でしょうか?
素朴な方法は次のとおりです。
var s string
for i := 0; i < 1000; i++ {
s += getShortStringFromSomewhere()
}
return s
しかし、それはあまり効率的ではないようです。
ベストアンサー1
新しい方法:
Go 1.10からはstrings.Builder
、詳細についてはこの回答をご覧ください。
昔のやり方:
使用bytes
パッケージにはBuffer
実装するタイプio.Writer
。
package main
import (
"bytes"
"fmt"
)
func main() {
var buffer bytes.Buffer
for i := 0; i < 1000; i++ {
buffer.WriteString("a")
}
fmt.Println(buffer.String())
}
これは O(n) 時間で実行されます。