這篇文章帶大家學習Golang,聊聊Go語言基礎中的數組,希望對大家有幫助。
【程式設計教學推薦:程式設計教學】
#數組是同一種資料型態元素的集合。在Go語言中,陣列從宣告時就決定,使用時可以修改陣列成員,但是陣列大小無法變更。基本語法:
// 定义一个长度为3元素类型为int的数组a var a [3]int
群組的長度必須是常數,且長度是陣列類型的一部分。一旦定義,長度不能改變。
var a [3]int var b [4]int a = b //不可以这样做,因为此时a和b是不同的类型
陣列可以透過下標進行訪問,下標是從0
開始,最後一個元素下標是:len-1
,訪問越界(下標在合法範圍之外),則觸發訪問越界,會panic。
①初始化陣列時可以使用初始化列表來設定陣列元素的值。
func main() { var testArray [3]int //数组会初始化为int类型的零值 var numArray = [3]int{1, 2} //使用指定的初始值完成初始化 var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化 fmt.Println(testArray) //[0 0 0] fmt.Println(numArray) //[1 2 0] fmt.Println(cityArray) //[北京 上海 深圳] }
②依照上面的方法每次都要確保提供的初始值和陣列長度一致,一般情況下我們可以讓編譯器根據初始值的個數自行推斷陣列的長度。
func main() { var testArray [3]int var numArray = [...]int{1, 2} var cityArray = [...]string{"北京", "上海", "深圳"} fmt.Println(testArray) //[0 0 0] fmt.Println(numArray) //[1 2] fmt.Printf("type of numArray:%T\n", numArray) //type of numArray:[2]int fmt.Println(cityArray) //[北京 上海 深圳] fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string }
我們也可以使用指定索引值的方式來初始化陣列
func main() { a := [...]int{1: 1, 3: 5} fmt.Println(a) // [0 1 0 5] fmt.Printf("type of a:%T\n", a) //type of a:[4]int }
遍歷陣列a有以下兩種方法:
func main() { var a = [...]string{"北京", "上海", "深圳"} // 方法1:for循环遍历 for i := 0; i < len(a); i++ { fmt.Println(a[i]) } // 方法2:for range遍历 for index, value := range a { fmt.Println(index, value) } }
Go語言是支援多維數組的,我們這裡以二維數組為例(數組中又嵌套數組)。
func main() { a := [3][2]string{ {"北京", "上海"}, {"广州", "深圳"}, {"成都", "重庆"}, } fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]] fmt.Println(a[2][1]) //支持索引取值:重庆 }
func main() { a := [3][2]string{ {"北京", "上海"}, {"广州", "深圳"}, {"成都", "重庆"}, } for _, v1 := range a { for _, v2 := range v1 { fmt.Printf("%s\t", v2) } fmt.Println() } } 输出: 北京 上海 广州 深圳 成都 重庆
注意:多維數組只有第一層可以使用...
來讓編譯器推導數組長度
//支持的写法 a := [...][2]string{ {"北京", "上海"}, {"广州", "深圳"}, {"成都", "重庆"}, } //不支持多维数组的内层使用... b := [3][...]string{ {"北京", "上海"}, {"广州", "深圳"}, {"成都", "重庆"},
陣列是值類型,賦值和傳參會複製整個陣列。因此改變副本的值,不會改變本身的值。
func modifyArray(x [3]int) { x[0] = 100 } func modifyArray2(x [3][2]int) { x[2][0] = 100 } func main() { a := [3]int{10, 20, 30} modifyArray(a) //在modify中修改的是a的副本x fmt.Println(a) //[10 20 30] b := [3][2]int{ {1, 1}, {1, 1}, {1, 1}, } modifyArray2(b) //在modify中修改的是b的副本x fmt.Println(b) //[[1 1] [1 1] [1 1]] }
tips:
陣列支援 “==“、”!=” 運算符,因為記憶體總是初始化過的。
[n]*T
表示指標數組,*[n]T
表示陣列指標 。
再次提醒,需要進技術交流群組
的同學,可以加我微信 fangdongdong_25
,需要進前端工程師交流群的備註「前端」
,需要進go後端交流群的備註「go後端」
【相關推薦:Go影片教學】
以上是一文淺析Golang中的數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!