Простое создание строк
Для простых случаев, когда производительность не является проблемой, fmt.Sprintf - ваш друг. Это чисто, просто и довольно эффективно.
s := fmt.Sprintf("Size: %d MB.", 85) // s == "Size: 85 MB."
Высокопроизводительная конкатенация строк с версии Go 1.10
strings.Builder используется для эффективного добавления строк с использованием методов записи.
- Он предлагает подмножество методов bytes.Buffer, что позволяет безопасно избежать дополнительного копирования при преобразовании Builder в строку.
- Вы можете использовать пакет fmt для форматирования, поскольку Builder реализует интерфейс io.Writer.
- Метод Grow может использоваться для предварительного выделения памяти, когда известен максимальный размер строки.
var b strings.Builder
b.Grow(32)
for i, p := range []int{2, 3, 5, 7, 11, 13} {
fmt.Fprintf(&b, "%d:%d, ", i+1, p)
}
s := b.String() // нет копирования
s = s[:b.Len()-2] // нет копирования
// (удаляет завершающий ", ")
fmt.Println(s)
Вывод:
1:2, 2:3, 3:5, 4:7, 5:11, 6:13
Создание строк до версии Go 1.10
Используйте fmt.Fprintf для печати в bytes.Buffer.
var buf bytes.Buffer
for i, p := range []int{2, 3, 5, 7, 11, 13} {
fmt.Fprintf(&buf, "%d:%d, ", i+1, p)
}
buf.Truncate(buf.Len() - 2) // Удаляет завершающий ", "
s := buf.String() // Копирует в новую строку
fmt.Println(s)
Вывод:
1:2, 2:3, 3:5, 4:7, 5:11, 6:13
Это решение довольно эффективно, но может привести к появлению лишнего мусора. Для более высокой производительности вы можете попробовать использовать функции добавления в пакете strconv.
buf := []byte("Size: ")
buf = strconv.AppendInt(buf, 85, 10)
buf = append(buf, " MB."...)
s := string(buf)
Если ожидаемая максимальная длина строки известна, вы можете предварительно выделить срез.
buf := make([]byte, 0, 16)
buf = append(buf, "Size: "...)
buf = strconv.AppendInt(buf, 85, 10)
buf = append(buf, " MB."...)
s := string(buf)
Читайте также:
- Строка, байт, руна, символ в Golang
- Массивы, срезы и строки: механика работы append в Golang
- Срезы в Golang: внутреннее устройство и использование
Комментариев нет:
Отправить комментарий