天天看點

Golang面試題解析(二)

考點:type

編譯失敗,因為type隻能使用在interface

考點:函數傳回值命名 在函數有多個傳回值時,隻要有一個傳回值有指定命名,其他的也必須有命名。 如果傳回值有有多個傳回值必須加上括号; 如果隻有一個傳回值并且有命名也需要加上括号; 此處函數第一個傳回值有sum名稱,第二個為命名,是以錯誤。

考點:defer和函數傳回值 需要明确一點是defer需要在函數結束前執行。 函數傳回值名字會在函數起始處被初始化為對應類型的零值并且作用域為整個函數 DeferFunc1有函數傳回值t作用域為整個函數,在return之前defer會被執行,是以t會被修改,傳回4; DeferFunc2函數中t的作用域為函數,傳回1; DeferFunc3傳回3

考點:new list:=make([]int,0)

考點:append append切片時候别漏了'...'

考點:結構體比較 進行結構體比較時候,隻有相同類型的結構體才可以比較,結構體是否相同不但與屬性類型個數有關,還與屬性順序相關。

sn3與sn1就不是相同的結構體了,不能比較。 還有一點需要注意的是結構體是相同的,但是結構體屬性中有不可以比較的類型,如map,slice。 如果該結構屬性都是可以比較的,那麼就可以使用“==”進行比較操作。

可以使用reflect.DeepEqual進行比較

是以編譯不通過: invalid operation: sm1 == sm2

考點:interface内部結構

考點:函數傳回值類型 nil 可以用作 interface、function、pointer、map、slice 和 channel 的“空值”。但是如果不特别指定的話,Go 語言不能識别類型,是以會報錯。通常編譯的時候不會報錯,但是運作是時候會報:<code>cannot use nil as type string in return argument</code>.

考點:iota 

結果:

本文轉自 夢朝思夕 51CTO部落格,原文連結:http://blog.51cto.com/qiangmzsx/1957477