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

Go中的字符串和[] byte有什么区别?

甄佐
2023-03-14
问题内容
s := "some string"
b := []byte(s) // convert string -> []byte
s2 := string(b) // convert []byte -> string

string[]byteGo 之间有什么区别?

什么时候使用“他”或“她”?

为什么?

bb := []byte{'h','e','l','l','o',127}
ss := string(bb)
fmt.Println(ss)

你好

输出是"hello",而缺少127,有时我觉得很奇怪。


问题答案:

string并且[]byte是不同的类型,但是它们可以相互转换:

3。将一个字节的切片转换为字符串类型会产生一个字符串,其连续字节是该切片的元素。

4。将字符串类型的值转换为字节片的类型会产生一个片,其连续元素是字符串的字节。

博客:数组,切片(和字符串):’append’的机制:

字符串实际上非常简单:它们只是字节的只读切片,而该语言还提供了一些额外的语法支持。

另请阅读:Go中的字符串,字节,符文和字符

什么时候使用另一个?

取决于您的需要。字符串是不可变的,因此它们可以共享,并且您可以确保它们不会被修改。

字节片可以修改(表示后备数组的内容)。

另外,如果您需要经常将a转换string为a
[]byte(例如,因为需要将其写入io.Writer()),则应首先考虑将其存储为a
[]byte

另请注意,您可以具有string
常量,但没有切片常量。这可能是一个小的优化。另请注意:

len(s)如果s为字符串常量,则表达式为常量。

同样,如果您使用的是已经编写的代码(标准库,第三者软件包或您自己的代码),则在大多数情况下,系统会提供必须传递或返回的参数和值。例如,如果您从读取数据io.Reader,则必须[]byte具有必须通过的数据才能接收读取的字节,因此不能使用string

这个例子:

bb := []byte{'h','e','l','l','o',127}

这里发生的是,您使用了一个复合文字(切片文字)来创建和初始化一个新的类型切片[]byte(使用Short变量声明)。您指定了常量以列出切片的初始元素。您还使用了一个字节值127-取决于平台/控制台-
可能具有也可能没有视觉表示。



 类似资料:
  • 问题内容: 我正在使用一个返回字节字符串的库,我需要将其转换为字符串。 尽管我不确定有什么区别-如果有的话。 问题答案: 假设使用Python 3(在Python 2中,这种区别的定义不太明确)-字符串是字符序列,即unicode码点;这些是一个抽象概念,不能直接存储在磁盘上。毫无疑问,字节字符串是字节的序列- 可以 存储在磁盘上的东西。它们之间的映射是一种 编码 -其中有很多(并且无限可能)-并

  • 问题内容: 在PHP中,将解析包含在“双引号”中的字符串以替换变量,而不会解析包含在“单引号”中的字符串。在Python中,这是否也适用? 问题答案: 否: 2.4.1。字符串和字节文字 …用简单的英语:两种类型的文字都可以用匹配的单引号()或双引号()括起来。它们也可以包含在三个单引号或双引号的匹配组中(通常称为三引号字符串)。反斜杠()字符用于转义具有特殊含义的字符,例如换行符,反斜杠本身或引

  • 问题内容: 我是Go编程语言的新手。 我注意到Go中有一些奇怪的地方:我认为它在Python中使用并替代了,但是当我在Go中使用时,它也是可行的。 和之间有什么区别? 问题答案: 是分配。有关Go中分配的更多信息:分配 和在变量声明中使用时的细微差别。 Go中变量声明的一般形式是: 上面的声明创建一个特定类型的变量,为其添加名称,并设置其初始值。 无论是或可以省略,但不能同时使用。 例如: 被称为

  • 据我所知, 可变字符串可以更改,不可变字符串不能更改。 这里我想这样改变字符串的值, 另一种方法是, 在这两种情况下,我都试图改变str的值。谁能告诉我,这两种情况的区别是什么,让我清楚地了解可变和不可变对象。

  • 这是c primer中的代码: 从

  • 下面这两种说法有什么区别?