是否可以在Golang中将string
转换为io.Writer
类型?
我将在fmt.Fprintf()
中使用此字符串,但我无法转换该类型。
答案 0 :(得分:52)
您无法在Go中写入string
,string
是不可变的。
最好的选择是bytes.Buffer
,因为Go 1.10更快strings.Builder
类型:它们实现io.Writer
,因此您可以写入它们,并且您可以将其内容作为{{{ 1}} Buffer.String()
和Builder.String()
,或Buffer.Bytes()
的字节切片。
如果使用bytes.NewBufferString()
创建缓冲区,也可以使用string
作为缓冲区的初始内容:
string
输出(在Go Playground上尝试):
s := "Hello"
buf := bytes.NewBufferString(s)
fmt.Fprint(buf, ", World!")
fmt.Println(buf.String())
如果要附加Hello, World!
类型的变量(或string
类型的任何值),您只需使用Buffer.WriteString()
(或Builder.WriteString()
):
string
或者:
s2 := "to be appended"
buf.WriteString(s2)
另请注意,如果您只想连接2 fmt.Fprint(buf, s2)
,则无需创建缓冲区并使用fmt.Fprintf()
,只需使用string
运算符即可连接它们:
+
另见:Golang: format a string without printing?
它也可能有趣:What's the difference between ResponseWriter.Write and io.WriteString?
答案 1 :(得分:2)
我看到另一个答案提到了 strings.Builder
,但我没有看到示例。所以
给你:
package main
import (
"fmt"
"strings"
)
func main() {
b := new(strings.Builder)
fmt.Fprint(b, "south north")
println(b.String())
}
答案 2 :(得分:0)
使用实现bytes.Buffer
方法的Write()
。
import "bytes"
writer := bytes.NewBufferString("your string")