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
没有定义改方法
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付