字符串在GO数组中是如何存储的?

huangapple go评论94阅读模式
英文:

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):

https://blog.golang.org/slices

huangapple
  • 本文由 发表于 2017年5月9日 00:17:13
  • 转载请务必保留本文链接:https://go.coder-hub.com/43852529.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定