Go面试题50

Posted by     "" on Tuesday, January 14, 2020

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))
}

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

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