Проблема
В Go строка является примитивным типом, она только для чтения, каждая манимуляция с ней создает новую строку.
Итак, нужно многократно конкатенировать строки, не зная длины результирующей строки. Какой лучший способ сделать это?
Бесхитростный способ:
1 2 3 4 5 |
s := "" for i := 0; i < 1000; i++ { s += getShortStringFromSomewhere() } return s |
но это не кажется очень эффектным.
Решение
Лучший способ — использовать пакет «bytes». Он имеет тип «Buffer», который реализует «io.Writer».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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) времени.