Go面试题38

Posted by     "" on Monday, January 6, 2020

Go面试题38

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

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

2: 下面代码输出什么?

func main() {
    x := []string{"a", "b", "c"}
    for v := range x {
        fmt.Print(v)
    }

}

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

type User struct{}
type User1 User
type User2 = User

func (i User1) m1() {
    fmt.Println("m1")
}

func (i User) m2(){
   fmt.Println("m2") 
}

func main() {
    var i1 User1
    var i2 User2

    i1.m1()
    i2.m2()
}

参考答案及解析

1: 答案: ABCD

2: 答案: 012, 注意区别下面代码段:

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

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

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

使用微信扫描二维码完成支付