好的代码会说话,见码
// 数组
// 按值传递的(即是传递的副本,定长
// [length]Type
// [N]Type{value1, value2, ..., valueN}
// [...]Type{value1, value2, ..., valueN}
// 切片
// 引用类型,不定长
// 会创建一个隐藏的初始化为零值的数组,返回一个引用该隐藏数组的切片
// make([ ]Type, length, capacity)
// make([ ]Type, length)
// [ ]Type{}
// [ ]Type{value1, value2, ..., valueN}
package main
import (
"fmt"
)
func main() {
// 定义go数组,值传递
// 省略号语法(go语言自动计算数组长度)
a := [...]int{1, 2, 3, 4, 5, 6, 7}
fmt.Printf("数组%v 的长度和容量是: %d 和 %d \n", a, len(a), cap(a))
fmt.Printf("数组%v 中的项是:", a)
// for ... range 迭代数组列表
for _, value := range a {
fmt.Printf("%d ", value)
}
fmt.Println()
s1 := a[3:6]
fmt.Printf("切片%v 的长度和容量是: %d 和 %d \n", s1, len(s1), cap(s1))
fmt.Printf("在切片内的项: %v 是:", s1)
for _, value := range s1 {
fmt.Printf("%d ", value)
}
fmt.Println()
s1[0] = 456
fmt.Printf("改变切片后的数组项是:%v", s1)
fmt.Println()
for _, value := range a {
fmt.Printf("% d", value)
}
fmt.Println()
s2 := make([]int, 10, 20)
s2[4] = 5
fmt.Printf("切片 %v is: %d and %d\n", s2, len(s2), cap(s2))
fmt.Printf("在切片 %v 项是:", s2)
for _, value := range s2 {
fmt.Printf("% d", value)
}
fmt.Println()
}
结果
数组[1 2 3 4 5 6 7] 的长度和容量是: 7 和 7
数组[1 2 3 4 5 6 7] 中的项是:1 2 3 4 5 6 7
切片[4 5 6] 的长度和容量是: 3 和 4
在切片内的项: [4 5 6] 是:4 5 6
改变切片后的数组项是:[456 5 6]
1 2 3 456 5 6 7
切片值: [0 0 0 0 5 0 0 0 0 0] is: 10 and 20
在切片 [0 0 0 0 5 0 0 0 0 0] 项是: 0 0 0 0 5 0 0 0 0 0