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

新手上路,请多包涵

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

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

原文由 Ari Seyhun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

你不能写入 stringstring 在 Go 中是不可变的。

最好的选择是 bytes.Buffer 并且从 Go 1.10 开始更快 strings.Builder 类型:他们实现 io.Writer 类型:他们实现 --- a string with Buffer.String() and Builder.String() , or as a byte slice with Buffer.Bytes() .

如果您使用 bytes.NewBufferString() 创建缓冲区,您还可以将 string 作为缓冲区的初始内容:

 s := "Hello"
buf := bytes.NewBufferString(s)
fmt.Fprint(buf, ", World!")
fmt.Println(buf.String())

输出(在 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)

或者:

 fmt.Fprint(buf, s2)

另请注意,如果您只想连接 2 string s,则无需创建缓冲区并使用 fmt.Fprintf() ,只需使用 + 运算符连接它们:

 s := "Hello"
s2 := ", World!"

s3 := s + s2  // "Hello, World!"

另请参阅: Golang:格式化字符串而不打印?

它可能也很有趣: ResponseWriter.Write 和 io.WriteString 之间有什么区别?

原文由 icza 发布,翻译遵循 CC BY-SA 3.0 许可协议

我看到另一个答案提到 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

原文由 Zombo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题