0
点赞
收藏
分享

微信扫一扫

Go 面试每天一篇(第 39 天)



你好哇,欢迎来答题,一起来看下

1.关于异常的触发,下面说法正确的是?

  • A. 空指针解析;
  • B. 下标越界;
  • C. 除数为0;
  • D. 调用panic函数;

参考答案及解析:ABCD。

2.下面代码输出什么?

1func main() {
2 x := []string{"a", "b", "c"}
3 for v := range x {
4 fmt.Print(v)
5 }
6}

参考答案及解析:012。注意区别下面代码段:

1func main() {
2 x := []string{"a", "b", "c"}
3 for _, v := range x {
4 fmt.Print(v) //输出 abc
5 }
6}

3.下面这段代码能否编译通过?如果通过,输出什么?

1type User struct{}
2type User1 User
3type User2 = User
4
5func (i User1) m1() {
6 fmt.Println("m1")
7}
8func (i User) m2() {
9 fmt.Println("m2")
10}
11
12func main() {
13 var i1 User1
14 var i2 User2
15 i1.m1()
16 i2.m2()
17}

参考答案及解析:能,输出​​m1 m2​​,第 2 行代码基于类型 User 创建了新类型 User1,第 3 行代码是创建了 User 的类型别名 User2,注意使用 = 定义类型别名。因为 User2 是别名,完全等价于 User,所以 User2 具有 User 所有的方法。但是 i1.m1() 是不能执行的,因为 User1 没有定义该方法。

解析若有不妥之处,欢迎在留言区交流、指正!

看下今天的题目:

  • A. 无缓冲的channel是默认的缓冲为1的channel;
  • B. 无缓冲的channel和有缓冲的channel都是同步的;
  • C. 无缓冲的channel和有缓冲的channel都是非同步的;
  • D. 无缓冲的channel是同步的,而有缓冲的channel是非同步的;

2.下面代码是否能编译通过?如果通过,输出什么?

1func Foo(x interface{}) {
2 if x == nil {
3 fmt.Println("empty interface")
4 return
5 }
6 fmt.Println("non-empty interface")
7}
8func main() {
9 var x *int = nil
10 Foo(x)
11}

3.下面代码输出什么?



答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!





Go 面试每天一篇(第 39 天)_下标越界


Go 面试每天一篇(第 39 天)_定义类_02


举报

相关推荐

0 条评论