每次学习并整理一个Golang的知识点,每天进步一点点。今天学习下cap和空接口的知识点🤔。

代码片段

1.关于 cap() 函数的适用类型,下面说法正确的是()

  • A. array
  • B. slice
  • C. map
  • D. channel

2.下面这段代码的输出结果?

1
2
3
4
5
6
7
8
func main() {  
    var i interface{}
    if i == nil {
        fmt.Println("nil")
        return
    }
    fmt.Println("not nil")
}
  • A. nil
  • B. not nil
  • C. compilation error

3.下面这段代码输出什么?

1
2
3
4
5
func main() {  
    s := make(map[string]int)
    delete(s, "h")
    fmt.Println(s["h"])
}
  • A. runtime panic
  • B. 0
  • C. compilation error

思考后看答案

思考后看下方答案…


答疑解惑

参考答案:

1. ABD go语言内置函数cap(),返回指定类型的容量;

  • len()可以用来查看数组或切片的长度,在数组中由于长度固定不可变,因此len()和cap()的值永远相同;
  • cap()可以用来查看数组或切片的容量;
  • cap()与channel搭配,返回channel缓冲区的容量;
  • cap()函数不能用于map;

2. A interface{}叫做空接口,空接口表示包含了0个方法的集合;

  • 由于任何类型都至少实现了0个方法,所以空接口可以承接任意类型。使用空接口传递任意类型数据是go语言的惯例用法;
  • 当声明了但没赋值的interface就是nil interface;但只要赋值了,即使赋了一个nil类型,也不再是nil interface了;
  • 当且仅当接口的动态值和动态类型都为 nil 时,接口类型值才为 nil;

3. B 删除map中不存在的key时,不报错;

  • 删除map中不存在的键值对时,不会报错,相当于没有任何作用;
  • 获取map中不存在的减值对时,返回值类型对应的零值,所以返回0;

以上,你做对了吗?😊

其他相关答案或补充知识点,欢迎在评论区留言补充!

下期提问

1.下面这段代码的输出结果?

1
2
3
4
5
func main() {  
    i := -5
    j := +5
    fmt.Printf("%+d %+d", i, j)
}
  • A. -5 +5
  • B. +5 +5
  • C. 0 0

2.写出下面这段代码的输出结果?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
type People struct{}

func (p *People) ShowA() {
    fmt.Println("showA")
    p.ShowB()
}
func (p *People) ShowB() {
    fmt.Println("showB")
}

type Teacher struct {
    People
}

func (t *Teacher) ShowB() {
    fmt.Println("teacher showB")
}

func main() {
    t := Teacher{}
    t.ShowB()
}

答案及解析将在下期文章中给出,欢迎大家在评论区留言,独乐乐不如众乐乐,交流学习,互相进步


欢迎转发和评论。更多优质原创文章,欢迎关注微信公众号“IYue爱月”或扫描下方二维码:

xujpxm_qrcode_gh