英文:
How are strings stored in a GO array?
问题
在GO的教程中,我遇到了以下代码:
var a [2]string
a[0] = "Hello"
a[1] = "World"
所以,一个数组的长度在声明数组时是不可变的。但是你可以在其中存储任意大小的字符串。
为什么可以这样做呢?
英文:
Following the tour of GO, I encountered the following code:
var a [2]string
a[0] = "Hello"
a[1] = "World"
So, an array's length is inmutable and set when the array is declared. But then you can store strings of any size in it.
Why can you do this?
答案1
得分: 1
在Go语言中,字符串是一个固定长度的结构体,包含一个长度和一个指向字节数组的指针。
因此,var a [2]string
分配了一个具有两个这样的结构体的数组。
a[0] = "Hello"
分配了另一个数组来存储 "Hello",并将指向该数组的指针和长度放入 a[0]
中。
英文:
In Go, a string is a fixed-length struct containing a length and a pointer to a byte array.
So var a [2]string
allocates an array with space for two such structs.
a[0] = "Hello"
allocates another array to store "Hello", and puts a pointer to this, and a length into a[0]
.
答案2
得分: 1
字符串就像只读的字节切片。所以这段代码能够工作的原因是因为数组只需要分配指针和一些元数据(字符串的长度)的空间。
在这里可以查看关于字符串的部分(在底部):
https://blog.golang.org/slices
英文:
Strings are like read-only slices of bytes. So the reason this code works is because the array need only allocate space for a pointer and some metadata (the length of the string).
See the section on Strings here (at the bottom):
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论