我有一个io.ReadCloser
对象(来自一个http.Response
对象)。
将整个流转换为string
对象的最有效方法是什么?
编辑:
从1.10开始,strings.Builder存在。例:
buf := new(strings.Builder)
n, err := io.Copy(buf, r)
// check errors
fmt.Println(buf.String())
下面的过时信息
简短的答案是,它效率不高,因为转换为字符串需要对字节数组进行完整复制。这是执行所需操作的正确方法(非有效方法):
buf := new(bytes.Buffer)
buf.ReadFrom(yourReader)
s := buf.String() // Does a complete copy of the bytes in the buffer.
此副本是作为保护机制完成的。字符串是不可变的。如果可以将[]
byte转换为字符串,则可以更改字符串的内容。但是,go允许您使用unsafe软件包禁用类型安全机制。使用不安全的包装,后果自负。希望仅此名称就足够了。这是我使用不安全方法的方法:
buf := new(bytes.Buffer)
buf.ReadFrom(yourReader)
b := buf.Bytes()
s := *(*string)(unsafe.Pointer(&b))
到此为止,您现在已将字节数组有效地转换为字符串。确实,所有这些都是在欺骗类型系统将其称为字符串。此方法有两个警告:
我的建议是坚持官方方法。进行复制并没有 那么 昂贵,也不值得进行不安全的弊端。如果字符串太大而无法进行复制,则不应将其制成字符串。
本文向大家介绍Go语言中io.Reader和io.Writer的详解与实现,包括了Go语言中io.Reader和io.Writer的详解与实现的使用技巧和注意事项,需要的朋友参考一下 一、前言 也许对这两个接口和相关的一些接口很熟悉了,但是你脑海里确很难形成一个对io接口的继承关系整天的概貌,原因在于godoc缺省并没有像javadoc一样显示官方库继承关系,这导致了我们对io接口的继承关系记忆不
问题内容: 我想替换原始字符串中的第n个字符。我可以使用来从字符串中访问第n个字符,但是当我给赋值时,会出现错误。 问题答案: 之所以发生这种情况,是因为它实际上是一个字符串并且是不可变的。如果适当地声明了它(作为字节片),则可以在尝试时将其分配。这是一个例子。 https://play.golang.org/p/N1sSsfIBQY 另外,您也可以按照其他答案中的说明使用切片。
我想通过 CGO 将 Go 字符串复制到字符 * 中。 我可以这样做吗?
问题内容: 我有一个EditText,它将用于浮点数。所以我试图从EditText读取文本并将其放入float变量中。但我似乎有文字悬而未决的问题。这是我的行: 我试过使用Float.parseFloat(string)和只是一般的铸造,但似乎什么也没有做。我在这里可以做什么?另外,有没有一种方法可以在将有效的浮点数写入变量之前检查其有效性? 问题答案: 试试这个。 如果包装器类将字符串转换为浮点
问题内容: 我有一个名称为package的字符串(例如“ my / package / test”),我想导入该字符串并从package调用一些函数。 像这样: PS。感谢帮助 问题答案: Go语言不允许您在示例中提到的内容。这是一个有意识的选择。我认为,这种选择的原因与编译器的性能以及机器对代码的理解容易程度有关。例如,这可以启用诸如gofix之类的工具,这些工具可以部分修复Go代码,而无需用户
问题内容: 在此结构定义中: 字符串 “ json:message” 的含义是什么,以及如何访问它(如果可访问)。先感谢您。 问题答案: 这些是结构标记。包使用此struct标记 将对象转换为JSON,并将 JSON字符串转换为对象 在将一个结构封送(编码)为JSON字符串时,它将查找此struct标记以分配 键名,如果不存在,则它可能会使用结构字段名本身 顺便说一句语法是错误的 这是供参考的示例