Ответ 1
Вы не можете писать в string
, string
в Go неизменны.
Лучшими альтернативами являются bytes.Buffer
, и, поскольку Go 1.10, более быстрые типы strings.Builder
: они реализуют io.Writer
, поэтому вы можете писать в них, и вы можете получить их содержимое в виде string
с помощью Buffer.String()
и Builder.String()
или в виде фрагмента байтов с помощью Buffer.Bytes()
.
Вы также можете иметь string
в качестве начального содержимого буфера, если создаете буфер с помощью bytes.NewBufferString()
:
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 string
с, вам не нужно создавать буфер и использовать fmt.Fprintf()
, вы можете просто использовать оператор +
для объединения им:
s := "Hello"
s2 := ", World!"
s3 := s + s2 // "Hello, World!"
Также см.: Golang: форматировать строку без печати?
Это также может представлять интерес: В чем разница между ResponseWriter.Write и io.WriteString?