当前位置: 首页 > 面试题库 >

golang:[] byte(string)与[] byte(* string)

逄宁
2023-03-14
问题内容

我很好奇为什么Golang不提供[]byte(*string)方法。从性能的角度来看,是否不会[]byte(string)复制输入参数并增加成本(尽管由于字符串是不可变的,所以这看起来很奇怪,为什么要复制它们)?

我是Go的新手,不胜感激。


问题答案:

[]byte("something")不是函数(或方法)调用,而是类型转换。

类型转换“本身”不会复制该值。但是将a转换string为a []byte确实需要,因为结果字节片是 可变的
,并且如果不进行复制,则可以修改/更改 不可变string值(的内容string),它必须为“
规范:字符串类型”部分规定:
__


字符串是不可变的:一旦创建,就无法更改字符串的内容。

请注意,在极少数情况下,string<=>
[]byte转换不会生成副本,因为编译器已对其进行了“优化”优化。当有证据证明不可变string不会/不会最终被修改时,这是罕见的“硬编码”情况。

这样的示例从键类型为的地图中查找值string,然后使用将[]byte转换为string当然(source)的索引来索引该地图:

key := []byte("some key")

var m map[string]T
// ...
v, ok := m[string(key)]  // Copying key here is optimized away

另一个优化是在string将显式转​​换为字节片的a的字节范围内时:

s := "something"
for i, v := range []byte(s) { // Copying s is optimized away
    // ...
}

(请注意,如果不进行转换,for range它将rune在字符串的s上而不是在其UTF8编码的字节上进行迭代。)



 类似资料:
  • 描述 (Description) 此方法使用命名的字符集将此String编码为字节序列,并将结果存储到新的字节数组中。 语法 (Syntax) 以下是此方法的语法 - public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 参数 (Parameters) 这是参数的细节 - charsetNam

  • 问题内容: 让我们转换为: 此转换操作的费用是多少?是否执行复制?据我在Go规范中所看到的: 字符串的行为就像字节的切片,但是是不可变的 ,这至少应该涉及复制,以确保后续的切片操作不会修改我们的字符串。反向对话会怎样?对话是否涉及编码/解码,如utf8 <->符文? 问题答案: 该不是铸造而是转换。有些转换与强制转换一样,只是重新解释了 原位 。不幸的是,这不是字符串到字节片转换的情况。字节片是可

  • 本文向大家介绍详谈C# 图片与byte[]之间以及byte[]与string之间的转换,包括了详谈C# 图片与byte[]之间以及byte[]与string之间的转换的使用技巧和注意事项,需要的朋友参考一下 实例如下: 以上这篇详谈C# 图片与byte[]之间以及byte[]与string之间的转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我用一个byte[]的图像取得了一类成就。 问题是用户将图像URL发送到create的endpoint spring在读取请求正文时抛出错误,甚至不允许我将图像转换为字节数组。 JSON分析错误:无法从字符串“//img.favpng.com/13/18/21/computer-icons-acquirement-trophy-award-png-favpng-tyahj0mkcwhjyqa1bp

  • String转换到Byte数组时,每个byte(byte类型其实就是uint8)保存字符串对应字节的数值。 注意Go的字符串是UTF-8编码的,每个字符长度是不确定的,一些字符可能是1、2、3或者4个字节结尾。 示例1: package main import "fmt" func main() { s1 := "abcd" b1 := []byte(s1) fmt.Pri

  • 问题内容: 无法将image.image转换为[] byte。问题点用虚线包裹。 基本上,我需要new_image为[] byte格式,以便可以将其发送到我的S3存储桶。 谢谢您的帮助。 问题答案: 您需要一个byte.Buffer,而不是bufio.Writer。bytes.Buffer在需要写入器的写入器时使用。bufio.Writer只是在将数据转发到另一个写入器之前将其缓存在内存中。