Подтвердить что ты не робот

Golang Преобразовать String в io.Writer?

Можно ли преобразовать a string в тип io.Writer в Golang?

Я буду использовать эту строку в fmt.Fprintf(), но я не могу преобразовать тип.

4b9b3361

Ответ 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?

Ответ 2

Используйте bytes.Buffer, который реализует метод Write().

import "bytes"

writer := bytes.NewBufferString("your string")