一起攻克面試難關:Go 面試每天一篇(第 4 天)

一起攻克面試難關:Go 面試每天一篇(第 4 天)

Golang來啦 , 作者 Seekload(四哥)

今天週一,注滿活力,加油!

繼續我們的每日一篇,題目可以看上一篇文章或如下截圖:

一起攻克面試難關:Go 面試每天一篇(第 4 天)

下面給出上一篇文章的答案:

1.兩段代碼分別輸出:

1[0 0 0 0 0 1 2 3]

2[1 2 3 4]

參考解析:這道題考的是使用 append 向 slice 添加元素,第一段代碼常見的錯誤是 [1 2 3],需要注意。

2.

參考答案:第二個返回值沒有命名。

參考解析:

在函數有多個返回值時,只要有一個返回值有命名,其他的也必須命名。如果有多個返回值必須加上括號();如果只有一個返回值且命名也必須加上括號()。這裡的第一個返回值有命名 sum,第二個沒有命名,所以錯誤。

3.

參考答案:

new(T) 和 make(T,args) 是 Go 語言內建函數,用來分配內存,但適用的類型不同。

new(T) 會為 T 類型的新值分配已置零的內存空間,並返回地址(指針),即類型為 *T 的值。換句話說就是,返回一個指針,該指針指向新分配的、類型為 T 的零值。適用於值類型,如數組、結構體等。

make(T,args) 返回初始化之後的 T 類型的值,這個值並不是 T 類型的零值,也不是指針 *T,是經過初始化之後的 T 的引用。make() 只適用於 slice、map 和 channel.

歡迎在留言區補充!

來看下今天的題目

1.下面這段代碼能否通過編譯,不能的話原因是什麼;如果能,輸出什麼。

1func main() {

2 list := new([]int)

3 list = append(list, 1)

4 fmt.Println(list)

5}

2.下面這段代碼能否通過編譯,如果可以,輸出什麼?

1func main() {

2 s1 := []int{1, 2, 3}

3 s2 := []int{4, 5}

4 s1 = append(s1, s2)

5 fmt.Println(s1)

6}

3.下面這段代碼能否通過編譯,如果可以,輸出什麼?

1var(

2 size := 1024

3 max_size = size*2

4)

5

6func main() {

7 fmt.Println(size,max_size)

8}

答案以及解析會在下一篇文章中給出,鼓勵大家在留言區留下答案,抱團學習,日拱一卒,每天進步一點!

所有學習上的成功,都只依靠兩件事 -- 策略和堅持,而堅持本身就是最重要的策略!


分享到:


相關文章: