Go 切片进阶
append 删除、copy、多维切片、nil vs empty · 难度:进阶 · +20XP
切片进阶操作
删除元素
Go 没有内置的删除方法,用 append + 切片组合实现:
s := []int{1, 2, 3, 4, 5}
// 删除索引 2 的元素(值 3)
s = append(s[:2], s[3:]...) // [1, 2, 4, 5]
// 删除最后一个
s = s[:len(s)-1]
复制切片
src := []int{1, 2, 3}
// 创建等长切片并复制
dst := make([]int, len(src))
copy(dst, src) // dst 是独立副本
// 注意:直接赋值只是复制引用
s2 := src // 指向同一个底层数组,修改 s2 会影响 src
nil vs empty slice
var nilSlice []int // nil,len=0,cap=0
emptySlice := []int{} // empty,len=0,cap=0
madeSlice := make([]int, 0) // empty,len=0,cap=0
// JSON: nil → null, empty → []