引用类型 一定要初始化 才可以使用
//切片是引用类型
func slice() {
var a []string
fmt.Println(a) //[]
var b []int
fmt.Println(b) //[]
var c = []bool{true, false, true}
fmt.Println(c) //[true false true]
//基于数组声明切片
aa := [5]int{1, 2, 3, 4, 5}
fmt.Println(aa) //[1 2 3 4 5]
bb := aa[1:4]
fmt.Println(bb) //[2 3 4]
//切片再切片
cc := bb[:]
fmt.Println(cc) //[2 3 4]
//make 构造切片
dd := make([]int, 5, 6) //[]int 切片类型,5元素长度,6切片容量
fmt.Print(dd)
//通过len() 获取切片长度
fmt.Println(len(dd)) //5
//通过cap() 获取切片容量
fmt.Println(cap(dd)) //6
//切片之间不能直接比较,nil 引用类型的 0值
var e []int //声明一个int类型切片
fmt.Println(e, len(e), cap(e)) //[] 0 0
if e == nil {
fmt.Println("e是一个nil") //e是一个nil
}
var f = []int{} //声明一个int类型切片,并且初始化
fmt.Println(f, len(f), cap(f)) //[] 0 0
if f != nil {
fmt.Println("f不是一个nil") //f不是一个nil
}
g := make([]int, 0)
fmt.Println(g, len(g), cap(g)) //[] 0 0
if g != nil {
fmt.Println("g不是一个nil") //g不是一个nil
}
fmt.Println(len(e)) //0
//切片是赋值拷贝
h := make([]int, 2)
fmt.Println(h) //[0 0]
h[0] = 100
fmt.Println(h) //[100 0]
//遍历切片
var i = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
for _, value := range i {
fmt.Println(value)
}
//append 追加元素 切片声明之后一定好初始化之后才可以用
var j []int
// fmt.Println(j[0]) //报错 没有初始化
j = append(j, 10)
fmt.Println(j[0]) //10
//遍历 append
k := make([]int, 0)
for i := 0; i < 10; i++ {
k = append(k, i)
}
fmt.Println(k) //[0 1 2 3 4 5 6 7 8 9]
//一次多个参数 append
l := make([]int, 0)
l = append(l, 1, 2, 3, 4, 5)
fmt.Println(l) //[1 2 3 4 5]
//两个 切片元素 合并 一个切片
m := make([]int, 1)
m = append(m, 4)
var n = []int{1, 2, 3, 5, 6}
m = append(m, n...)
fmt.Println(m) //[0 4 1 2 3 5 6]
//copy
o := []int{1, 2, 3, 4, 5}
p := make([]int, 5, 5)
q := p
copy(p, o)
p[0] = 100
fmt.Println(o) //[1 2 3 4 5]
fmt.Println(p) //[100 2 3 4 5]
fmt.Println(q) //[100 2 3 4 5]
//删除元素 广州
r := []string{"北京", "上海", "广州", "深圳"}
slice1 := r[0:2]
fmt.Println(slice1) //北京,上海
slice2 := r[3:]
fmt.Println(slice2) //[深圳]
slice3 := append(slice1, slice2...)
fmt.Println(slice3) //[北京 上海 深圳]
var num = []string{"a", "b", "c", "d", "e", "f", "g", "h", "o"}
fmt.Println(num[1:2]) //b; 1 = 指针位置b ,2=长度(长度-1)
fmt.Println(num[1:]) //[b c d e f g h o]
//判断 切片 len()
var slice4 = make([]int, 0)
fmt.Println(len(slice4)) //0
if len(slice4) == 0 {
fmt.Println("slice4 长度是", len(slice4)) //slice4 长度是 0
}
slice4 = append(slice4, 1)
if len(slice4) != 0 {
fmt.Println("slice4 长度是", len(slice4)) //slice4 长度是 1
}
//习题:输出下面结果
var example = make([]string, 5, 10) //[ ],五个空字符串,还支持追加五个字符串元素
for i := 0; i < 10; i++ {
example = append(example, fmt.Sprintf("%v", i))
}
fmt.Println(example) //[ 0 1 2 3 4 5 6 7 8 9];通过append 扩容将元素全部追加到切片内
}