文章目录
- 1.下面这段代码输出什么?
- 2.下面代码输出什么?
- 3.同级文件的包名不允许有多个,是否正确?
- 4.下面的代码有什么问题,请说明。
1.下面这段代码输出什么?
func main() {count := 0for i := range [256]struct{}{} {m, n := byte(i), int8(i)if n == -n {count++}if m == -m {count++}}fmt.Println(count)
}
参考答案及解析:4。知识点:数值溢出。当 i 的值为 0、128 是会发生相等情况,注意 byte 是 uint8 的别名。
2.下面代码输出什么?
const (azero = iotaaone = iota
)const (info = "msg"bzero = iotabone = iota
)func main() {fmt.Println(azero, aone)fmt.Println(bzero, bone)
}
参考答案及解析:0 1 1 2。知识点:iota 的使用。这道题易错点在 bzero、bone 的值,在一个常量声明代码块中,如果 iota 没出现在第一行,则常量的初始值就是非 0 值。
3.同级文件的包名不允许有多个,是否正确?
A. true
B. false
参考答案及解析:A。一个文件夹下只能有一个包,可以多个.go文件,但这些文件必须属于同一个包。
4.下面的代码有什么问题,请说明。
type data struct {name string
}func (p *data) print() {fmt.Println("name:", p.name)
}type printer interface {print()
}func main() {d1 := data{"one"}d1.print()var in printer = data{"two"}in.print()
}