Is it possible to convert a string
to an io.Writer
type in Golang?
I will be using this string in fmt.Fprintf()
but I am unable to convert the type.
Is it possible to convert a string
to an io.Writer
type in Golang?
I will be using this string in fmt.Fprintf()
but I am unable to convert the type.
You can't write into a string
, string
s in Go are immutable.
The best alternatives are the bytes.Buffer
and since Go 1.10 the faster strings.Builder
types: they implement io.Writer
so you can write into them, and you can obtain their content as a string
with Buffer.String()
and Builder.String()
, or as a byte slice with Buffer.Bytes()
.
You can also have a string
as the initial content of the buffer if you create the buffer with bytes.NewBufferString()
:
s := "Hello"
buf := bytes.NewBufferString(s)
fmt.Fprint(buf, ", World!")
fmt.Println(buf.String())
Output (try it on the Go Playground):
Hello, World!
If you want to append a variable of type string
(or any value of string
type), you can simply use Buffer.WriteString()
(or Builder.WriteString()
):
s2 := "to be appended"
buf.WriteString(s2)
Or:
fmt.Fprint(buf, s2)
Also note that if you just want to concatenate 2 string
s, you don't need to create a buffer and use fmt.Fprintf()
, you can simply use the +
operator to concatenate them:
s := "Hello"
s2 := ", World!"
s3 := s + s2 // "Hello, World!"
Also see: Golang: format a string without printing?
It may also be of interest: What's the difference between ResponseWriter.Write and io.WriteString?
I saw the other answer mention strings.Builder
, but I didn't see an example. So here you go:
package main
import (
"fmt"
"strings"
)
func main() {
b := new(strings.Builder)
fmt.Fprint(b, "south north")
println(b.String())
}
strings.Builder
, you can also use .WriteString(s string)
method on builder instead of passing builder to fmt.Fprint
. –
Annmarie Use bytes.Buffer
which implements the Write()
method.
import "bytes"
writer := bytes.NewBufferString("your string")
© 2022 - 2024 — McMap. All rights reserved.