[]byte s2 := string(b) // convert []byte -> s-6ren">
gpt4 book ai didi

string - Go中的string和[]byte有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 01:26:37 30 4
gpt4 key购买 nike

s := "some string"
b := []byte(s) // convert string -> []byte
s2 := string(b) // convert []byte -> string

Go中的string[]byte有什么区别?

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

为什么?

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

hello

输出只是"hello",没有127,有时觉得很奇怪。

最佳答案

string[]byte是不同的类型,但是 they can be converted to one another :

3 . Converting a slice of bytes to a string type yields a string whose successive bytes are the elements of the slice.

4 . Converting a value of a string type to a slice of bytes type yields a slice whose successive elements are the bytes of the string.

博客:Arrays, slices (and strings): The mechanics of 'append' :

Strings are actually very simple: they are just read-only slices of bytes with a bit of extra syntactic support from the language.

另请阅读:Strings, bytes, runes and characters in Go

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

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

可以修改字节 slice (即支持数组的内容)。

此外,如果您需要经常将 string 转换为 []byte(例如,因为您需要将其写入 io.Writer() ),您应该考虑存储它首先作为一个 []byte

另请注意,您可以使用 string constants但是没有 slice 常量。这可能是一个小的优化。另请注意:

The expression len(s) is constant if s is a string constant.

此外,如果您使用的是已经编写的代码(标准库、第三方包或您自己的代码),在大多数情况下,它会给出您必须传递或返回的参数和值。例如。如果您从 io.Reader 中读取数据, 你需要有一个 []byte ,你必须传递它来接收读取的字节,你不能为此使用 string


这个例子:

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

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

关于string - Go中的string和[]byte有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32625959/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com