Golang将字符串转换为io.Writer?

时间:2016-03-30 07:31:02

标签: string go writer

是否可以在Golang中将string转换为io.Writer类型?

我将在fmt.Fprintf()中使用此字符串,但我无法转换该类型。

3 个答案:

答案 0 :(得分:52)

您无法在Go中写入stringstring是不可变的。

最好的选择是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())
}

https://golang.org/pkg/strings#Builder

答案 2 :(得分:0)

使用实现bytes.Buffer方法的Write()

import "bytes"

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