GoLang之切片底层系列一(切片初始化)

GoLang之切片底层系列一(切片初始化)

注:本文以Windos系统上Go SDK 1.18进行讲解

1.var创建不初始值

func main() {
	var a []int
	if a == nil {
		fmt.Println("yes")//输出:yes
	} else {
		fmt.Println("no")
	}
 fmt.Println(len(a), cap(a)) //0 0

}

image-20220121170432761
image-20220121170504786
image-20220105162043984

image-20220105162232433

2.var创建不初始值再集体赋值

image-20220127121337836

3.var创建初始化值

func main() {
	var a = []int{1, 2}
	fmt.Println(a, len(a), cap(a)) //[1,2]    2  2
}

image-20220105201053779

image-20220105201109799

4.var创建初始化值不能再超出容量追加值

image-20220121171608294

5.var创建初始化值再集体赋值

image-20220121160121753

6.make创建规则

image-20220105201142300
image-20220105162132817
image-20220121160826634

7.make指定len创建

image-20220121172206357

8.make指定len创建再集体赋值

image-20220121172255000
image-20220121173333231

9.make指定len创建再集体赋值不能再超出容量追加值

image-20220121173606889

10.make指定len创建再集体赋值能再不超出容量追加值

image-20220121172945093

11.make指定len与cap创建再集体赋值不能再超出容量追加值

image-20220121173020044

12.创建不初始化值再集体赋值

image-20220127121259181

13.创建不初始化值不能再超出容量追加值

image-20220106154551538

14.集体复制必须加[]

image-20220106154329721

15.字符串slice直接输出没有引号

image-20220210215313769

16.slice切割

image-20220105200504998

image-20220105200923171

image-20220105200938679

image-20220105202732611

image-20220106194738720

image-20220105200812130

image-20220105200750407

以下说明切片并不改变原来的元素

image-20220105202104102

image-20220105162413457

image-20220105162423666

对于数组,指向数组的指针,或切片a(注意不能是字符串)支持完整切片表达式:
a[low : high : max]
上面的代码会构造与简单切片表达式a[low: high]相同类型、相同长度和元素的切片。另外,它会将得到的结果切片的容量设置为max-low。
完整切片表达式需要满足的条件是0 <= low <= high <= max <= cap(a),其他条件和简单切片表达式相同
注意:在完整切片表达式中只有第一个索引值(low)可以省略;它默认为0。

func main() {
	a := [5]int{1, 2, 3, 4, 5}
	s := a[1:3]  // s := a[low:high]
	fmt.Printf("s:%v len(s):%v cap(s):%v\n", s, len(s), cap(s))
}
/*
s:[2 3] len(s):2 cap(s):4
*/
func main() {
	a := [5]int{1, 2, 3, 4, 5}
	t1 := a[1:3:3]
	fmt.Printf("t:%v len(t):%v cap(t):%v\n", t1, len(t1), cap(t1)) //t:[2 3] len(t):2 cap(t):2
	t2 := a[1:3:4]
	fmt.Printf("t:%v len(t):%v cap(t):%v\n", t2, len(t2), cap(t2)) //t:[2 3] len(t):2 cap(t):3
	t3 := a[1:3:5]
	fmt.Printf("t:%v len(t):%v cap(t):%v\n", t3, len(t3), cap(t3)) //t:[2 3] len(t):2 cap(t):4
}
func main() {
	a := [5]int{1, 2, 3, 4, 5}
	t1 := a[:3:3]
	fmt.Printf("t:%v len(t):%v cap(t):%v\n", t1, len(t1), cap(t1)) //t:[1 2 3] len(t):3 cap(t):3
	t2 := a[:3:4]
	fmt.Printf("t:%v len(t):%v cap(t):%v\n", t2, len(t2), cap(t2)) //t:[1 2 3] len(t):3 cap(t):4
	t3 := a[:3:5]
	fmt.Printf("t:%v len(t):%v cap(t):%v\n", t3, len(t3), cap(t3)) //t:[1 2 3] len(t):3 cap(t):5
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Golang中,有几种初始化切片的方式可以使用。 第一种方式是使用字面量来初始化切片。这种方式会创建一个匿名的底层数组,并将切片指向该数组的第一个元素。例如,可以使用以下语法来初始化一个切片: s := []int{1,2,3} 这将创建一个整型切片s,其中包含了元素1、2和3。 第二种方式是基于已经存在的数组来初始化切片。可以通过指定切片的下界和上界来限定切片能访问数组的范围。例如,可以使用以下语法来初始化一个切片: a := [5]int{1,2,3,4,5} s := a[:] 或者可以使用以下语法来初始化一个切片: s := []int{1,2,3,4,5} s2 := s<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang切片的声明、初始化以及操作示例,详解、概括](https://blog.csdn.net/qq_25805331/article/details/120306433)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Golang】Slice](https://blog.csdn.net/dai815904261/article/details/124046351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoGo在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值