从昨天的答题留言来看,@十二 同学三道题目都答对了,特别棒!鼓励其他同学参与答题,加油!

公布下昨天题目的答案,题目见昨天的文章
1.
参考答案及解析:不能通过编译,new([]int) 之后的 list 是一个 *[]int 类型的指针,不能对指针执行 append 操作。可以使用 make() 初始化之后再用。同样的,map 和 channel 建议使用 make() 或字面量的方式初始化,不要用 new() 。

2.
参考答案及解析:不能通过编译。append() 的第二个参数不能直接使用 slice,需使用 … 操作符,将一个切片追加到另一个切片上:append(s1,s2…)。或者直接跟上元素,形如:append(s1,1,2,3)。

关于 slice 的用法可以看下文末的推荐阅读。

3.
参考答案及解析:不能通过编译。这道题的主要知识点是变量声明的简短模式,形如:x := 100。但这种声明方式有限制:

  1. 必须使用显示初始化;

  2. 不能提供数据类型,编译器会自动推导;

  3. 只能在函数内部使用简短模式;

欢迎在留言区补充!

今天只有一题,来看下:
1.下面这段代码能否通过编译?不能的话,原因是什么?如果通过,输出什么?

 1func main() {
2    sn1 := struct {
3        age  int
4        name string
5    }{age: 11, name: "qq"}
6    sn2 := struct {
7        age  int
8        name string
9    }{age: 11, name: "qq"}
10
11    if sn1 == sn2 {
12        fmt.Println("sn1 == sn2")
13    }
14
15    sm1 := struct {
16        age int
17        m   map[string]string
18    }{age: 11, m: map[string]string{"a": "1"}}
19    sm2 := struct {
20        age int
21        m   map[string]string
22    }{age: 11, m: map[string]string{"a": "1"}}
23
24    if sm1 == sm2 {
25        fmt.Println("sm1 == sm2")
26    }
27}

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

ps:对大部分人来说,初学一门新的语言,不管是Java、Python 还是 Go,初始阶段最大的困惑可能就是不知道从何处下手。之前就在思考这个问题,所以打算从面试题入手,由点及面去学,进而对 Go 能有一个很好的掌握,就有了这一系列面试题文章,虽然才刚开始,但我有信心做下去并且做好!一件利他利己的事儿,提升自己的同时也希望可以帮助更多的人!

pps:如果觉得这种方式不错且文章对你有一点帮助,帮忙花 1s 时间点下文末右下角的「在看」,感激,一点小私心。

 

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

 

 

推荐阅读:

非懂不可的Slice(一)

非懂不可的Slice(二)

 

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

Go 面试每天一篇(第 5 天)_面试

Go 面试每天一篇(第 5 天)_面试_02

 

Go 面试每天一篇(第 5 天)_面试_03