Go面试题17

Posted by     "" on Tuesday, December 24, 2019

Go面试题17

1: 下面代码中, x已声明, y没有声明, 判断每条语句的对错.

1. x, _ := f()
2. x, _ = f()
3. x, y :=f()
4. x, y = f()

2: 下面的代码输出什么?

func increaseA() int {
    var i int
    defer func() {
        i++
    }()
    return i
}

func increaseB() (r int) {
    defer func() {
        r++
    }()
    return r
}

func main() {
    fmt.Println(increaseA())
    fmt.Println(increaseB())
}
  • A. 1 1
  • B. 0 1
  • C. 1 0
  • D. 0 0

3: 下面代码输出什么?

type A interface {
    ShowA() int
}

type B interface {
    ShowB() int
}

type Work struct {
    i int
}

func (w Work) ShowA() int {
    return w.i + 10
}

func (w Work) ShowB() int {
    return w.i + 20
}

func main() {
    var a A = Work{3}
    s := a.(Work)
    fmt.Println(s.ShowA())
    fmt.Println(s.ShowB())
}
  • A. 13 23
  • B. compilation error

参考答案及解析

1: 答案及解析: 错,对,对,错.知识点: 变量的声明.

1.错, x已经声明,不能使用:=;
2.对;
3.对, 当多值赋值时,:=左边的变量无论声明与否都可以;
4.错, y没有声明.

2: 答案及解析: B. 知识点: defer,返回值.注意一下,increaseA()的返回参数是匿名,increaseB()是具名.关于deferreturn返回值的知识点有后面后详细的分析.

3: 答案及解析: A. 知识点: 类型断言. 这道题可以和面试题15的第三题和面试题16的第三题结合来看.

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

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