> 文章列表 > Go语言面试题--基础语法(28)

Go语言面试题--基础语法(28)

Go语言面试题--基础语法(28)

文章目录

    • 1.下面的代码有什么问题?
    • 2.下面代码输出什么?
    • 3.下面代码有什么问题?

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
}