mirror of
https://gitee.com/shikong-sk/golang-study
synced 2025-02-23 15:32:15 +08:00
docs: Slice 切片
This commit is contained in:
parent
aed95370cf
commit
41f6051df6
108
base/slice/main.go
Normal file
108
base/slice/main.go
Normal file
@ -0,0 +1,108 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
// 定义一个 int 切片
|
||||
var s1 []int
|
||||
// 定义并初始化切片
|
||||
var s2 = []int{1, 2, 3}
|
||||
|
||||
fmt.Printf("s1: %T %+v\n", s1, s1)
|
||||
fmt.Printf("s2: %T %+v\n", s2, s2)
|
||||
|
||||
fmt.Println("=========================================================")
|
||||
|
||||
// 未初始化时为 nil
|
||||
fmt.Printf("s1 == nil : %t\n", s1 == nil)
|
||||
fmt.Printf("s2 == nil : %t\n", s2 == nil)
|
||||
|
||||
fmt.Println("=========================================================")
|
||||
|
||||
// 长度和容量
|
||||
fmt.Printf("s1 长度: %d, 容量: %d\n", len(s1), cap(s1))
|
||||
fmt.Printf("s2 长度: %d, 容量: %d\n", len(s2), cap(s2))
|
||||
|
||||
fmt.Println("=========================================================")
|
||||
|
||||
// 从数组获取切片
|
||||
a1 := [...]int{0, 1, 2, 3, 4, 5}
|
||||
fmt.Printf("a1: %T %+v\n", a1, a1)
|
||||
// 基于数组进行切割
|
||||
// 数组[起始下标:截止下标]
|
||||
// 从起始下标开始 到截止下标为止(不包含) 左闭右开
|
||||
// 切片的容量是指底层数组的容量
|
||||
// 切片容量的大小是 从 切片的第一个元素下标 到 被切割的数组/切片最后一个元素下标 的长度
|
||||
s3 := a1[1:4]
|
||||
fmt.Printf("s3: %T %+v\n", s3, s3)
|
||||
fmt.Printf("s3 长度: %d, 容量: %d\n", len(s3), cap(s3))
|
||||
|
||||
// a1[:4] => a1[0:4]
|
||||
s4 := a1[:4]
|
||||
fmt.Printf("s4: %T %+v\n", s4, s4)
|
||||
fmt.Printf("s4 长度: %d, 容量: %d\n", len(s4), cap(s4))
|
||||
|
||||
// a1[4:] => a1[4:最后一个下标] => a1[4:len(a1)]
|
||||
s5 := a1[4:]
|
||||
fmt.Printf("s5: %T %+v\n", s5, s5)
|
||||
fmt.Printf("s5 长度: %d, 容量: %d\n", len(s5), cap(s5))
|
||||
|
||||
// a1[4:] => a1[4:最后一个下标] => a1[4:len(a1)]
|
||||
s6 := s5[1:]
|
||||
fmt.Printf("s6: %T %+v\n", s6, s6)
|
||||
fmt.Printf("s6 长度: %d, 容量: %d\n", len(s6), cap(s6))
|
||||
|
||||
fmt.Println("=========================================================")
|
||||
|
||||
// 切片 是引用类型 内部都指向底层的同一个数组
|
||||
fmt.Printf("a1: %T %+v ", a1, a1)
|
||||
fmt.Printf("s5: %T %+v ", s5, s5)
|
||||
fmt.Printf("s6: %T %+v\n", s6, s6)
|
||||
|
||||
// 修改底层数组的值
|
||||
a1[len(a1)-1] = 666
|
||||
|
||||
fmt.Printf("a1: %T %+v ", a1, a1)
|
||||
fmt.Printf("s5: %T %+v ", s5, s5)
|
||||
fmt.Printf("s6: %T %+v\n", s6, s6)
|
||||
|
||||
fmt.Println("=========================================================")
|
||||
|
||||
// 使用 make 创建切片
|
||||
// make([]类型,长度,容量) 容量不填时 默认 与 长度相同
|
||||
s7 := make([]int, 5, 10)
|
||||
fmt.Printf("s7: %T %+v\n", s7, s7)
|
||||
fmt.Printf("s7 长度: %d, 容量: %d\n", len(s7), cap(s7))
|
||||
|
||||
s8 := make([]int, 0, 10)
|
||||
fmt.Printf("s8: %T %+v\n", s8, s8)
|
||||
fmt.Printf("s8 长度: %d, 容量: %d\n", len(s8), cap(s8))
|
||||
|
||||
fmt.Println("=========================================================")
|
||||
|
||||
// 切片 为引用类型 会被修改
|
||||
s9 := []bool{true, true, true}
|
||||
s10 := s9
|
||||
|
||||
fmt.Printf("s9: %T %+v\n", s9, s9)
|
||||
fmt.Printf("s10: %T %+v\n", s10, s10)
|
||||
|
||||
s10[1] = false
|
||||
|
||||
fmt.Printf("s9: %T %+v\n", s9, s9)
|
||||
fmt.Printf("s10: %T %+v\n", s10, s10)
|
||||
|
||||
fmt.Println("=========================================================")
|
||||
|
||||
// 切片遍历
|
||||
// for...i 循环时需使用 len() 而不能使用 cap()
|
||||
for i := 0; i < len(s10); i++ {
|
||||
fmt.Printf("%d, %v ", i, s10[i])
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
|
||||
for i, v := range s10 {
|
||||
fmt.Printf("%d, %v ", i, v)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user