在Golang中创建一个带有已知文本字符串的字节切片

时间:2014-09-05 18:28:49

标签: encoding go

我有这个文本,我想把它放入一个字节片:

s := "There are these two young fish swimming along and they happen to meet an older fish swimming the other way"

如果我写

b := []byte("There are these two young fish swimming along and they happen to meet an older fish swimming the other way")

据我了解,在运行时,这将:

  1. 使用内存中的值创建一个字符串
  2. 创建一个字节切片
  3. 将字符串的内容复制到字节切片中(根据需要重新分配)
  4. 我可以将每个字符串值转换为它们的ASCII等效值并直接创建字节切片:

    b := []byte{84, 104, ... }
    

    虽然这不是非常易读。

    我知道这里的例子有点微不足道,大多数计算机都可以一闪而过,但我对它很好奇。编译器是否解释[]byte("blah")并在编译时将其转换为有效的字节片?如果字符串包含非ASCII字符,那么最佳解决方案会改变吗?

2 个答案:

答案 0 :(得分:4)

将字符串嵌入可执行程序中作为字符串文字。它使用runtime.stringtoslicebyte函数在运行时将字符串文字转换为字节切片。

答案 1 :(得分:3)

如果要从常量字符串初始化[]byte变量,看起来编译器足够聪明,不会创建中间字符串:相反,字节片的后备数组直接从静态数据初始化而不是先构建一个字符串变量。

有一个数据副本,但在构造一个可变类型时可以预料到这一点。