Go语言面试题--基础语法(28)
1.下面的代码有什么问题?
func main() {const x = 123const y = 1.23fmt.Println(x)
}
参考答案及解析:编译可以通过。知识点:常量。常量是一个简单值的标识符,在程序运行时,不会被修改的量。不像变量,常量未使用是能编译通过的。
2.下面代码输出什么?
const (x uint16 = 120ys = "abc"z)func main() {fmt.Printf("%T %v\\n", y, y)fmt.Printf("%T %v\\n", z, z)
}
参考答案及解析:知识点:常量。
输出:
uint16 120string abc
常量组中如不指定类型和初始化值,则与上一行非空常量右值相同
3.下面代码有什么问题?
func main() { var x string = nil if x == nil { x = "default"}
}
参考答案及解析:将 nil 分配给 string 类型的变量。这是个大多数新手会犯的错误。修复代码:
func main() { var x string //defaults to "" (zero value)if x == "" {x = "default"}
}
4.下面代码输出什么?
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))
}
参考答案及解析:false true。Go 语言的 switch 语句虽然没有"break",但如果 case 完成程序会默认 break,可以在 case 语句后面加上关键字 fallthrough,这样就会接着走下一个 case 语句(不用匹配后续条件表达式)。或者,利用 case 可以匹配多个值的特性。
修复代码:
func main() {isMatch := func(i int) bool {switch(i) {case 1:fallthroughcase 2:return true}return false}fmt.Println(isMatch(1)) // truefmt.Println(isMatch(2)) // truematch := func(i int) bool {switch(i) {case 1,2:return true}return false}fmt.Println(match(1)) // truefmt.Println(match(2)) // true
}