基本类型
像C语言一样,Go提供了一系列的基本类型,常见的布尔,整数和浮点数类型都具备。它有一个Unicode的字符串类型
和数组类型。同时该语言还引入了两 种新的类型:slice 和map。
数组和切片
Go语言当中的数组不是像C语言那样动态的。它们的大小是类型的一部分,在编译时就决定了。数组的索引还是使用
的熟悉的C语法(如 a_),_ 并且与C一样,索引是由0开始的。编译器提供了内建的功能在编译时求得一个数组的长度
(如 len(a))。如果试图超过数组界限写入,会产生一个运行时错误。
Go还提供了切片(slices),作为数组的变形。一个切片(slice)表示一个数组内的连续分段,支持程序员指定底层
存储的明确部分。构建一个切片 的语法与访问一个数组元素类似:
- /* Construct a slice on ary that starts at s and is len elements long */
- s1 := ary[s:len]
- /* Omit the length to create a slice to the end of ary */
- s2 := ary[s:]
- /* Slices behave just like arrays */
- s[0] == ary //=> true
- // Changing the value in a slice changes it in the array
- ary = 1
- s[0] = 42
- ary == 42 //=> true
该切片所引用的数组分段可以通过将新的切片赋值给同一变量来更改:
- /* Move the start of the slice forward by one, but do not move the end */
- s2 = s2[1:]
- /* Slices can only move forward */
- s2 = s2[-1:] // this is a compile error
切片的长度可以更改,只要不超出切片的容量。切片s的容量是数组从s[0]到数组尾端的大小,并由内建的cap()函数
返回。一个切片的长度永远不能超出它的容量。
这里有一个展示长度和容量交互的例子: