Go Slice

引用类型 一定要初始化 才可以使用

//切片是引用类型
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 扩容将元素全部追加到切片内
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值