数组
import "fmt"
func main() {
var a = [3]int{1, 2, 3} // 一维数组,指定长度
var b = [...]int{1, 2, 3} // 一维数组,未指定长度
var c = [...]int{1: 1, 2: 2, 3: 3} // 指定下标
var d = [3][2]int{{1, 2}, {3, 4}, {5, 6}} // 二维数组
fmt.Print(a, b, c, d) // 输出[1 2 3] [1 2 3] [0 1 2 3] [[1 2] [3 4] [5 6]]
}
注意:Golang中,数组是值类型
// 数组赋值
var a1 = [...]int{1, 2, 3}
var a2 = a1
println(&a1, &a2) // 输出0xc000044738 0xc000044720 内存地址不一致,赋值会复制整个数据,而非指针
// 对比结构体赋值
type s struct {
}
var s1 = s{}
var s2 = s1
println(&s1, &s2) // 输出 0xc000044708 0xc000044708
类型相同的数组可以直接使用==
、!=
进行比较
// case 1
var a1 = [3]int{1, 2, 3}
var a2 = [3]int{1, 2, 4}
println(a1 == a2) // 输出false
// case 2
var a3 = [3]int{1, 2, 3}
var a4 = [2]int{1, 2}
println(a3 == a4) // [3]int与[2]int类型不同,报错:invalid operation: a3 == a4 (mismatched types [3]int and [2]int)
// case 3
var a5 = [...]int{1,2,3}
var a6 = [...]int{1,2,3}
println(a5 == a6) // 输出true
// case 4
var a7 = [...]int{1,2,3}
var a8 = [...]int{1,2}
println(a7 == a8) // 报错:invalid operation: a7 == a8 (mismatched types [3]int and [2]int)
// case 5
var a9 = []int{1,2,3}
var a10 = []int{1,2,3}
println(a9 == a10) // 切片不能这样比较,报错:invalid operation: a9 == a10 (slice can only be compared to nil)
// case 6
var a11 = []int{1,2,3}
var a12 = [...]int{1,2,3}
println(a11 == a12) // 报错:invalid operation: a11 == a12 (mismatched types []int and [3]int)
使用len()
和cap()
函数
len()
查看长度,cap()
查看容量
// 对于数组,len()和cap()的输出结果是一样的
var a = [...]int{1, 2, 3}
var b = [5]int{1, 2, 3}
println(len(a), cap(a)) // 输出 3 3
println(len(b), cap(b)) // 输出 5 5