Go面试题50
1: 下面这段代码输出什么?
type T struct {
ls []int
}
func foo(t T) {
t.ls[0] = 100
}
func main() {
var t = T{
ls: []int{1,2,3},
}
foo(t)
fmt.Println(t.ls[0])
}
- A.
1
- B.
100
- C.
compilation error
2: 下面代码输出什么?
func main() {
isMatch := func(i int) bool {
switch(i) {
case 1:
case 2:
return true
}
return false
}
fmt.Println(isMatch(1))
fmt.Println(isMatch(2))
}
参考答案及解析
1: 答案及解析: B
. 调用foo()
函数时虽然是传值, 但foo()
函数中, 字段ls
依旧可以看成是指向底层数组的指针.
2: 答案及解析: false true
. Go 语言的switch
语句虽然没有break
, 但如果case
完成程序会默认break
,可以在case
语句后面加上关键字fallthrough
, 这样就会接着走下一个case
语句(不用匹配后续条件表达式). 或者,利用case
可以匹配多个值的特性.
修复代码:
func main() {
isMath := func(i int) bool {
switch i {
case 1:
fallthrough
case 2:
true
}
return false
}
fmt.Println(isMatch(1)) // true
fmt.Println(isMatch(2)) // true
match := func(i int) bool {
switch(i) {
case 1, 2:
return true
}
return false
}
fmt.Println(match(1)) // true
fmt.Println(match(2))
}
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付