1. 程式人生 > 其它 >GO面試第三天

GO面試第三天

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.只能在函式內部使用簡短模式