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语音的常量计数器,只能在常量的表达式中使用.
iota
在const
关键字出现时将被重置为0
, const
中每新增一行常量声明将使iota
计数一次.
2: 答案及解析: s is nil
和 p is not nil
.
我们分配给变量p
的声明明明是nil
,然而p
却不是nil
. 记住一点, 当且仅当动态值和动态类型都为nil
时,接口类型值才为nil
. 上面的代码,给变量p
赋值之后,p
的动态值是nil
,但是动态类型却是*Student
,是一个nil
指针,所有相等条件不成立.
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付