Go面试题26

Posted by     "" on Friday, December 27, 2019

Go面试题26

1: 下面这段代码输出什么?

const (
    a = iota
    b = iota
)

const (
    name = "name"
    c = iota
    d = iota
)

func main(){
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
    fmt.Println(d)
}

2: 下面这段代码输出什么? 为什么?

type People interface {
    Show()
}

type Student struct {}

func (stu *Student) Show(){

}

func main() {
    var s *Student
    if s == nil {
        fmt.Println("s is nil")
    } else {
        fmt.Println("s is not nil")
    }
    var p People = s
    if p == nil {
        fmt.Println("p is nil")
    } else {
        fmt.Println("p is not nil")
    }
}

参考答案及解析

1: 答案及解析: 0 1 1 2. 知识点: iota的用法.
iota是golang语音的常量计数器,只能在常量的表达式中使用.
iotaconst关键字出现时将被重置为0, const中每新增一行常量声明将使iota计数一次.

2: 答案及解析: s is nilp is not nil.
我们分配给变量p的声明明明是nil,然而p却不是nil. 记住一点, 当且仅当动态值和动态类型都为nil时,接口类型值才为nil. 上面的代码,给变量p赋值之后,p的动态值是nil,但是动态类型却是*Student,是一个nil指针,所有相等条件不成立.

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

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