基本数据类型
数组
Go语言中数组是值语义。一个数组变量即表示整个数组,它并不是隐式的指向第一个元素的指针(比如C语言的数组),而是一个完整的值。当一个数组变量被赋值或者被传递的时候,实际上会复制整个数组。如果数组较大的话,数组的赋值也会有较大的开销。为了避免复制数组带来的开销,可以传递一个指向数组的指针,但是数组指针并不是数组。
1 | var a = [...]int{1, 2, 3} // a 是一个数组 |
但是数组指针类型依然不够灵活,因为数组的长度是数组类型的组成部分,指向不同长度数组的数组指针类型也是完全不同的。
字符串
Go语言字符串的底层结构在reflect.StringHeader
中定义:
1 | type StringHeader struct { |
分析可以发现,“Hello, world”字符串底层数据和以下数组是完全一致的:
1 | var data = [...]byte{ |