Go学习每日一问(11)-slice的比较
文章目录
每次学习并整理一个Golang的知识点,每天进步一点点。今天学习下数组切片的比较等知识点🤔。
代码片段
1.下面这段代码的输出结果?
|
|
- A.3
- B.4
- C.compilation error
2.下面这段代码的输出结果?
|
|
- A. equal
- B. not equal
- C. compilation error
思考后看下方答案…
答疑解惑
参考答案:
1. C
invalid slice index: 4 > 3
基于数组切片,可以使用操作符创建新的切片,形如s[n:l:c],n是偏移的起始位置,l是偏移的长度结束,c是偏移的容量结束位置;l-n 就是新切片的长度, c-n 就是新切片的容量;题中偏移的容量起始和容量结束均为3,那么新切片容量为零是不允许的;
有意思的是,n、l和c并不是当前切片的索引,所以l是可以超出当前切片的长度的,但不能超出当前切片的容量;比如假设oldSlice只有5个元素,但容量是10;newSlice却可以基于oldSlice的前7个元素创建,newSlice中超出oldSlice的部分都会填上0;
2. C
invalid operation: a == b (mismatched types [3]int and [4]int)
==操作最重要的一个前提是:两个操作数类型必须相同!类型必须相同!类型必须相同!;如果类型不同,那么编译时就会报错。
数组的长度视为类型的一部分,长度不同的两个数组是不同的类型,不能直接比较。所以 a 和 b 属于不同的类型,不能比较,所以编译错误。
以上,你做对了吗?😊
扩展阅读
引用类型的比较
引用类型是间接指向它所引用的数据的,保存的是数据的地址。引用类型的比较实际判断的是两个变量是不是指向同一份数据,它不会去比较实际指向的数据。
例如:
|
|
因为aa
和bb
指向的两个不同的结构体,虽然它们指向的值是相等的,但是它们不等。aa
和cc
指向相同的结构体,所以它们相等。
再看看channel的比较:
|
|
ch1
和ch2
虽然类型相同,但是指向不同的channel,所以它们不等。 ch1
和ch3
指向相同的channel,所以它们相等。
其他相关答案或补充知识点,欢迎在评论区留言补充!
下期提问
1.关于 cap() 函数的适用类型,下面说法正确的是()
- A. array
- B. slice
- C. map
- D. channel
2.下面这段代码的输出结果?
|
|
- A. nil
- B. not nil
- C. compilation error
3.下面这段代码输出什么?
|
|
- A. runtime panic
- B. 0
- C. compilation error
答案及解析将在下期文章中给出,欢迎大家在评论区留言,独乐乐不如众乐乐,交流学习,互相进步。
欢迎转发和评论。更多优质原创文章,欢迎关注微信公众号“IYue爱月”或扫描下方二维码: