在Golang中,是否可以将string
类型转换为io.Writer
类型?
我想在fmt.Fprintf()
中使用这个字符串,但我无法进行类型转换。
string
,它们是不可变的。最好的替代方案是使用bytes.Buffer
或自Go 1.10起更快的strings.Builder
类型:它们实现了io.Writer
接口,因此您可以向它们写入内容,并且可以使用Buffer.String()
和Builder.String()
将其作为string
获取内容,或者使用Buffer.Bytes()
将其作为字节片获取内容。如果要将字符串作为缓冲区的初始内容,则可以使用bytes.NewBufferString()
创建缓冲区:
s := "Hello"
buf := bytes.NewBufferString(s)
fmt.Fprint(buf, ", World!")
fmt.Println(buf.String())
输出结果(可在Go Playground上尝试):
Hello, World!
Buffer.WriteString()
(或Builder.WriteString()
)。s2 := "to be appended"
buf.WriteString(s2)
或者:
fmt.Fprint(buf, s2)
请注意,如果您只想连接2个字符串
,则无需创建缓冲区并使用fmt.Fprintf()
,您可以直接使用+
运算符将它们连接起来:
s := "Hello"
s2 := ", World!"
s3 := s + s2 // "Hello, World!"
另请参阅:Golang: format a string without printing?(如何在 Golang 中格式化字符串而不打印出来?)
我看到其他回答提到了strings.Builder
,但没有看到示例。因此,给您提供一个示例:
package main
import (
"fmt"
"strings"
)
func main() {
b := new(strings.Builder)
fmt.Fprint(b, "south north")
println(b.String())
}
strings.Builder
的情况下,您也可以在构建器上使用.WriteString(s string)
方法,而不是将构建器传递给fmt.Fprint
。 - Arsham AryaWrite()
方法的bytes.Buffer
。最初的回答。import "bytes"
writer := bytes.NewBufferString("your string")