首頁  >  文章  >  後端開發  >  一文淺析Golang中的數組

一文淺析Golang中的數組

青灯夜游
青灯夜游轉載
2022-11-29 21:00:455446瀏覽

這篇文章帶大家學習Golang,聊聊Go語言基礎中的數組,希望對大家有幫助。

一文淺析Golang中的數組

【程式設計教學推薦:程式設計教學

1.陣列定義:

#數組是同一種資料型態元素的集合。在Go語言中,陣列從宣告時就決定,使用時可以修改陣列成員,但是陣列大小無法變更。基本語法:

// 定义一个长度为3元素类型为int的数组a
var a [3]int

群組的長度必須是常數,且長度是陣列類型的一部分。一旦定義,長度不能改變。

var a [3]int
var b [4]int
a = b //不可以这样做,因为此时a和b是不同的类型

陣列可以透過下標進行訪問,下標是從0開始,最後一個元素下標是:len-1,訪問越界(下標在合法範圍之外),則觸發訪問越界,會panic。

2.陣列的初始化

①初始化陣列時可以使用初始化列表來設定陣列元素的值。

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
}

3.陣列的遍歷

遍歷陣列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)
	}
}

4.多維數組

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{
	{"北京", "上海"},
	{"广州", "深圳"},
	{"成都", "重庆"},

5.數組是值類型

陣列是值類型,賦值和傳參會複製整個陣列。因此改變副本的值,不會改變本身的值。

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中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除
上一篇:go語言開源嗎下一篇:go語言開源嗎