go学习记——(10)数组与切片

数组与切片
数组
  1. 数组是值类型。取地址&变量名;
  2. 数组的第一个元素的地址,就是数组的地址;
  3. 数组的每个元素的地址间隔是依据数组的类型决定,比如int64-》8 interweb2-》4
四种数组初始化方式
	var numsArray01 [3]int = [3]int{1, 2, 3}
	var numsArray02 = [3]int{1, 2, 3}
	var numsArray03 = [...]int{1, 2, 3}
	var numsArray04 = [3]string{1: "tom", 0: "jack", 2: "cc"}
	fmt.Println(numsArray01)
	fmt.Println(numsArray02)
	fmt.Println(numsArray03)
	fmt.Println(numsArray04)
	// 循环
	for _, value := range numsArray01 {
		fmt.Println(value)
	}
数组的注意事项和细节
  1. 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。
  2. var arr []int 这时arr就是一个slice切片。
  3. 数组中的元素可以是任何数据类型,包括值类型和引用类型,但不能混用。
  4. 数组创建后,如果没有赋值,有默认值
  5. 使用数组的步骤:
    • 声明数组并开辟空间
    • 给数组各个元素赋值
    • 使用数组
  6. 数组的下标是从0开始的
  7. 数组下标必须在指定范围内使用,否则报panic:数组越界。
  8. Go的数组属于值类型,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响。
  9. 如想在其他函数中,去修改原来的数组,可以使用引用传递(指针方式)。
  10. 长度是数组类型的一部分,在传递函数参数时需要考虑数组的长度。
切片
切片的基本介绍
  1. 切片的英文是slice
  2. 切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
  3. 切片的使用和数组类似,遍历切片、访问切片的缘故和求切片长度len(slice)都一样。
  4. 切片的长度时可以变化的,因此切片时一个可以动态变化数组。
  5. 切片定义的基本语法:var 变量名 []类型
切片使用的三种方式
// 通过数组创建切片
var arr1 = [...]int{1, 2, 3}
var s1 = arr1[0:2]
// make创建切片
// var 切片名 []type = make([]type,len,[cap])
var s2 []int = make([]int, 3, 5)
// 直接赋值
var s3 []int = []int{1, 2, 3}

方式1和方式2的区别(面试)

  1. 方式1是直接引用数组,这个数组是事先存在的,程序员是可见的。
  2. 方式2是通过make来创建切片,make也会创建一个数组,是由切片在底层进行维护,程序员是不可见。
string 与 slice
  1. string底层是一个byte数组,因此string也可以进行切片处理
数组与切片
数组
  1. 数组是值类型。取地址&变量名;
  2. 数组的第一个元素的地址,就是数组的地址;
  3. 数组的每个元素的地址间隔是依据数组的类型决定,比如int64-》8 interweb2-》4
四种数组初始化方式
	var numsArray01 [3]int = [3]int{1, 2, 3}
	var numsArray02 = [3]int{1, 2, 3}
	var numsArray03 = [...]int{1, 2, 3}
	var numsArray04 = [3]string{1: "tom", 0: "jack", 2: "cc"}
	fmt.Println(numsArray01)
	fmt.Println(numsArray02)
	fmt.Println(numsArray03)
	fmt.Println(numsArray04)
	// 循环
	for _, value := range numsArray01 {
		fmt.Println(value)
	}
数组的注意事项和细节
  1. 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。
  2. var arr []int 这时arr就是一个slice切片。
  3. 数组中的元素可以是任何数据类型,包括值类型和引用类型,但不能混用。
  4. 数组创建后,如果没有赋值,有默认值
  5. 使用数组的步骤:
    • 声明数组并开辟空间
    • 给数组各个元素赋值
    • 使用数组
  6. 数组的下标是从0开始的
  7. 数组下标必须在指定范围内使用,否则报panic:数组越界。
  8. Go的数组属于值类型,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响。
  9. 如想在其他函数中,去修改原来的数组,可以使用引用传递(指针方式)。
  10. 长度是数组类型的一部分,在传递函数参数时需要考虑数组的长度。
切片
切片的基本介绍
  1. 切片的英文是slice
  2. 切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
  3. 切片的使用和数组类似,遍历切片、访问切片的缘故和求切片长度len(slice)都一样。
  4. 切片的长度时可以变化的,因此切片时一个可以动态变化数组。
  5. 切片定义的基本语法:var 变量名 []类型
切片使用的三种方式
// 通过数组创建切片
var arr1 = [...]int{1, 2, 3}
var s1 = arr1[0:2]
// make创建切片
// var 切片名 []type = make([]type,len,[cap])
var s2 []int = make([]int, 3, 5)
// 直接赋值
var s3 []int = []int{1, 2, 3}

方式1和方式2的区别(面试)

  1. 方式1是直接引用数组,这个数组是事先存在的,程序员是可见的。
  2. 方式2是通过make来创建切片,make也会创建一个数组,是由切片在底层进行维护,程序员是不可见。
string 与 slice
  1. string底层是一个byte数组,因此string也可以进行切片处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值