這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
先看一個簡單的數組定義:
var array [3]int
上面語句定義了變數array
,這個變數是一個包含3
個整數的數群組類型。可以使用Go
語言內建的len
函數得到數組長度:
package mainimport ( "fmt")func main() { var array [3]int fmt.Println(len(array))}
執行以上程式結果:
3
需要注意的是,在Go
語言中,數組的長度是數群組類型的一部分,它必須是一個常量運算式,即長度的值在程式編譯時間是可以得到的。請看下面這個程式:
package mainimport ( "fmt")func print_array(array []int) { fmt.Printf("In function, array is %v\n", array)}func main() { var array [3]int print_array(array )}
編譯這個程式會產生下面的錯誤:
main.go:14: cannot use array (type [3]int) as type []int in argument to print_array
Go
語言要求傳入函數的形參和實參的類型必須是完全符合的,而array
的類型是[3]int
,不是[]int
,所以編譯會出錯。
Go
語言函數參數都是傳值調用,所以如果函數的參數是數組的話,那麼實際傳入的將是原數組的拷貝。請看這個例子:
package mainimport ( "fmt")func change_array(array [3]int) { for i, _ := range array { array[i] = 1 } fmt.Printf("In function, array address is %p, value is %v\n", &array, array)}func main() { var array [3]int fmt.Printf("Original array address is %p, value is %v\n", &array, array) change_array(array) fmt.Printf("Changed array address is %p, value is %v\n", &array, array)}
執行結果:
Original array address is 0xc082006560, value is [0 0 0]In function, array address is 0xc0820065e0, value is [1 1 1]Changed array address is 0xc082006560, value is [0 0 0]
可以看到,在change_array
函數中操作的數組地址並不是main
函數中的數組地址,而main
函數中的數組的值在調用change_array
函數前後也沒有發生變化。
如果數組的元素類型是可比較的,那麼數群組類型就是可比較的,即可以使用“==
”和“!=
”運算子對數組進行運算。 請看下例:
package mainimport "fmt"func main() { a := [...]int{2, 1} b := [...]int{1, 2} fmt.Println(a == b, a != b)}
執行結果如下:
false true