GO面試第三天
阿新 • • 發佈:2022-04-04
1.下面這段程式碼能否通過編譯,不能的話原因是什麼;如果能,輸出什麼。
func main() { list := new([]int) list = append(list, 1) fmt.Println(list) }
參考答案及解析:
不能通過編譯,new([]int) 之後的 list 是一個 *[]int
型別的指標,不能對指標執行 append 操作。可以使用 make() 初始化之後再用。同樣的,map 和 channel 建議使用 make() 或字面量的方式初始化,不要用 new() 。
2.下面這段程式碼能否通過編譯,如果可以,輸出什麼?
func main() { s1 := []int{1, 2, 3} s2 := []int{4, 5} s1 = append(s1, s2) fmt.Println(s1) }
參考答案及解析:不能通過編譯。append() 的第二個引數不能直接使用 slice,需使用 … 操作符,將一個切片追加到另一個切片上:append(s1,s2…)。或者直接跟上元素,形如:append(s1,1,2,3)。
3.下面這段程式碼能否通過編譯,如果可以,輸出什麼?
var( size := 1024 max_size = size*2 ) func main() { fmt.Println(size,max_size) }
參考答案及解析:不能通過編譯。這道題的主要知識點是變數宣告的簡短模式,形如:x := 100。但這種宣告方式有限制:
1.必須使用顯示初始化;
2.不能提供資料型別,編譯器會自動推導;
3.只能在函式內部使用簡短模式;