Go 面试每天一篇(第 47 天)

 

你好哇,欢迎来答题,一起来看下昨天题目的解析:

1.下面的代码有什么问题?

1func main() {
2    const x = 123
3    const y = 1.23
4    fmt.Println(x)
5}

参考答案及解析:编译可以通过。知识点:常量。常量是一个简单值的标识符,在程序运行时,不会被修改的量。不像变量,常量未使用是能编译通过的。

2.下面代码输出什么?

 1const (
2    x uint16 = 120
3    y
4    s = "abc"
5    z
6)
7
8func main() {
9    fmt.Printf("%T %v\n", y, y)
10    fmt.Printf("%T %v\n", z, z)
11}

参考答案及解析:知识点:常量。

输出:

1uint16 120
2string abc

常量组中如不指定类型和初始化值,则与上一行非空常量右值相同

3.下面代码有什么问题?

1func main() {  
2    var x string = nil 
3
4    if x == nil { 
5        x = "default"
6    }
7}

参考答案及解析:将 nil 分配给 string 类型的变量。这是个大多数新手会犯的错误。修复代码:

1func main() {  
2    var x string //defaults to "" (zero value)
3
4    if x == "" {
5        x = "default"
6    }
7}

引自:http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html

解析若有不妥之处,欢迎在留言区交流、指正!

看下今天的题目:
1.下面的代码有什么问题?

1func main() {
2    data := []int{1,2,3}
3    i := 0
4    ++i
5    fmt.Println(data[i++])
6}

2.下面代码最后一行输出什么?请说明原因。

 1func main() {
2    x := 1
3    fmt.Println(x)
4    {
5        fmt.Println(x)
6        i,x := 2,2
7        fmt.Println(i,x)
8    }
9    fmt.Println(x)  // print ?
10}

 

答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!

 

所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!

 

推荐阅读:

 

800 字彻底理解 Go 指针

 

 

如果我的文章对你有所帮助,点赞、转发都是一种支持!

Go 面试每天一篇(第 47 天)

Go 面试每天一篇(第 47 天)

Go 面试每天一篇(第 47 天)

 

上一篇:将Javaweb项目部署到华为云服务器


下一篇:剑指 offer 47 礼物的最大价值