【Go】开始使用Go-微软入门教程笔记
基本数据类型
数组(array)
// 数组可具有零个或多个元素,你必须在声明或初始化它们时定义大小。 // 此外,它们一旦创建,就无法调整大小。 鉴于这些原因,数组在 Go 程序中并不常用,但它们是切片和映射的基础。 cities := [5]string{"New York", "Paris", "Berlin", "Madrid"} // 数组长度这里为5 q := [...]int{1, 2, 3} // 不确定数组长度时, 使用省略号...初始化 cities := [...]string{"New York", "Paris", "Berlin", "Madrid"} // 数组长度由你初始化它时输入的字符串决定, 这里为4 numbers := [...]int{99: -1} // 指在99位置初始化值为1. 这里数组长度为100 var twoD [3][5]int // 多维数组
切片(slice)
- 声明和初始化
切片只有 3 个组件:
- * 指向基础数组中第一个可访问元素的指针。 此元素不一定是基础数组的第一个元素 array[0] 。
- length 切片的长度。 切片中的元素数目。
- capacity 切片的容量。切片容量仅指出切片可扩展的程度,即切片开头与基础数组尾端之间的元素数目。
从切片 quarter2 创建扩展切片,如下例所示
// 要声明切片,可采用与声明数组相同的方式操作。 package main import "fmt" func main() { months := []string{"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} fmt.Println(months) fmt.Println("Length:", len(months)) // len = 切片的实际长度 fmt.Println("Capacity:", cap(months)) // cap = len(months) - 开始位置i // 与array的第一个区别是切片的大小不是固定的,而是动态的。 创建切片后,可向其添加更多元素,这样切片就会扩展 quarter2 := months[3:6] // len(quarter2) = 3; cap(quarter2) = 12 - 3 =9 quarter2Extended := quarter2[:4] // len(quarter2Extended) = 4; cap(quarter2Extended) = 9 }
注意, 长度与容量的区别:切片长度指切片实际包含的元素数量;切片容量指切片可扩展的程度。
在上例中,切片长度为 3 个元素,但容量为 9,原因是基础数组有更多元素或位置可供使用,但对切片而言不可见。 例如,如果你尝试打印类似 fmt.Println(quarter2[3]) 的内容,会出现以下错误: panic: runtime error: index out of range [3] with length 3 。
- 创建切片的副本
Go 具有内置函数 copy(dst, src []Type) 用于创建切片的副本。 例如:
letters := []string{"A", "B", "C", "D", "E"} slice2 := make([]string, 3) copy(slice2, letters[1:4])
为何要创建副本? 因为更改非副本切片中的元素时,基础数组将随之更改。
注意, copy之后, 切片不会继承基础数组的capacity.
字符串遍历
source: Go 语言中的字符与字符串遍历 - 知乎 (zhihu.com)
byte(字节)是uint8的别名,长度为 1 个字节,用于表示 ASCII 字符rune是int32的别名,长度为 4 个字节,用于表示以 UTF-8 编码的 Unicode 码点
Tips:
Unicode 和 ASCII 一样,是一种字符集,UTF-8 则是一种编码方式.
Unicode 从 0 开始,为每个符号指定一个编号,这叫做「码点」(code point).
UTF-8 是一种变长的编码方法,字符长度从 1 个字节到 4 个字节不等, 其中一个汉字占用3个字节.
总结:
- Go 语言中没有字符的概念,一个字符就是一堆字节,它可能是单个字节(ASCII 字符集),也有可能是多个字节(Unicode 字符集).
- 字符串的截取 numeral[i:j] , 以及下标索引字符串 numeral[i] , 都是以字节为单位
- 想要遍历
rune类型的字符则使用range方法进行遍历 for index, digit := range numeral {}

浙公网安备 33010602011771号