Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Go中的字符串和[]字节之间有什么区别?_String_Go_Slice - Fatal编程技术网

String Go中的字符串和[]字节之间有什么区别?

String Go中的字符串和[]字节之间有什么区别?,string,go,slice,String,Go,Slice,Go中的字符串和[]字节之间有什么区别 什么时候用“他”或“她” 为什么? 你好 输出只是“hello”,缺少127,有时我觉得很奇怪。和类型不同,但是: 三,。将字节片转换为字符串类型将生成一个字符串,其连续字节是该片的元素 四,。将字符串类型的值转换为字节类型的切片将生成一个切片,其后续元素是字符串的字节 博客:: 字符串实际上非常简单:它们只是字节的只读片段,并有一点来自语言的额外语法支持 另见: 什么时候使用一个而不是另一个? 这取决于你需要什么。字符串是不可变的,所以它们可以共享,并且

Go中的
字符串
[]字节
之间有什么区别

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

为什么?

你好

输出只是“hello”,缺少
127
,有时我觉得很奇怪。

和类型不同,但是:

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

四,。将字符串类型的值转换为字节类型的切片将生成一个切片,其后续元素是字符串的字节

博客::

字符串实际上非常简单:它们只是字节的只读片段,并有一点来自语言的额外语法支持

另见:

什么时候使用一个而不是另一个?

这取决于你需要什么。字符串是不可变的,所以它们可以共享,并且您可以保证它们不会被修改

可以修改字节片(表示支持数组的内容)

如果您需要频繁地将<代码>字符串 >转换为<代码> []字节(例如,因为您需要将其写入AN),首先应考虑将其存储为<代码> []字节。 还请注意,您可以有

字符串
,但没有切片常量。这可能是一个小优化。还请注意:

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

此外,如果您使用的是已经编写的代码(标准库、第三方软件包或您自己的),在大多数情况下,都会给出您必须传递或返回的参数和值。例如,如果您从中读取数据,则需要有一个
[]字节
,您必须传递该字节才能接收读取的字节,而不能使用
字符串


这个例子:

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

这里发生的事情是,您使用了(slice literal)来创建和初始化类型为
[]byte
(使用)的新片。您指定了常量以列出切片的初始元素。您还使用了一个字节值
127
,根据平台/控制台的不同,该值可能有视觉表示,也可能没有视觉表示。

很晚了,但我希望这能有所帮助

简单地说

  • 0
    1
    是机器表示所有信息的方式
  • 字节
    8位
    ,表示UTF-8编码,即字符
  • []类型:给定数据类型的切片。切片是动态大小数组
  • []字节:这是一个字节片,即包含字节的
    动态
    大小数组,即每个元素是一个UTF-8字符
  • 字符串:只读字节片,即
    不可变

考虑到所有这些:

s:=“开始”
bs:=[]字节
fmt.Printf(“%s”,bs)//输出:Go
fmt.Printf(“%d”,bs)//输出:[71 111]

bs:=[]字节{71111}
fmt.Printf(“%s”,bs)//输出:Go
%s
将字节片转换为字符串

%d
获取字节的UTF-8十进制值


重要提示:

由于
字符串是不可变的
,因此它们不能在内存中更改,每次从字符串中添加或删除内容时,GO都会在内存中创建一个新字符串。另一方面,
字节片是可变的
,因此当您更新字节片时,您不会在内存中重新创建新内容


因此,选择正确的结构可能会影响应用程序的性能。

字符值是字符串的一部分。但是,它不会渲染为角色(此处)。查看字符串的长度(将为6)以验证是否包含此字符,即使未显示。(许多其他字符代码,例如32以下的字符代码,也不会在标准控制台中呈现为字符。)这个答案对于普通人来说更容易理解。
bb := []byte{'h','e','l','l','o',127}
ss := string(bb)
fmt.Println(ss)
bb := []byte{'h','e','l','l','o',127}