1. 程式人生 > 實用技巧 >Golang 陣列

Golang 陣列

Golang 陣列

目錄

陣列的四種初始化

func main() {
	var arr1 [3]int
	fmt.Println(arr1)
    
	//int[] arr = new int[3]{1,3,4}; Java中報錯
	var arr2 = [3]int{1, 2, 4}
	fmt.Println(arr2)
    
	//形如Java int[] arr = new int[]{1,2,3,4}
	var arr3 = [...]int{1, 2, 3, 4}
	fmt.Println(arr3)
    
	//類似於Js中的偽陣列形式, 預設按照陣列下標填充
	var arr4 = [...]int{1: 100, 0: 200, 2: 300}//200,100,300
	fmt.Println(arr4)
    
	arr5 := [...]string{1: "tom", 0: "Jack"}
	fmt.Println(arr5)
}

for - range

func main() {
	arr5 := [...]string{1: "tom", 0: "Jack",2:"Jessie",3:"Lucy"}
	//和Js中的forEach方法相似,可以同時獲取到下標和值
	for idx, val := range arr5 {
		fmt.Printf("index = %d, val = %s \n",index,val)
	}
	fmt.Println(arr5)
}

注意事項

  1. 陣列是多個相同型別資料的組合, 一個數組一旦宣告/ 定義了, 其長度是固定的, 不能動態變化

  2. var arr[] int , arr就是一個slice切片, 注意沒有初始長度

  3. Go的陣列屬於值型別, 在預設情況下是值傳遞, 因此會進行值拷貝, 陣列間不會相互影響,

    不同於JavaC#

    //長度做為陣列的一部分, [3]int != [4]int
    func method(arr [4]int) {
       for idx, _ := range arr {
          arr[idx] *= 10
       }
    }
    func main() {
       arr := [...]int{1, 2, 3, 4}
       fmt.Println(arr) // 1,2,3,4
       method(arr)
       fmt.Println(arr) // 1,2,3,4
    }
    
  4. 如果想在其它函式中, 修改原來的陣列, 可以使用引用傳遞(指標)

    //使用指標型別
    func method(arr *[4]int) {
    	arr[0] = 10
    }
    func main() {
    	arr := [...]int{1, 2, 3, 4}
    	fmt.Println(arr) // 1,2,3,4
    	method(&arr)
    	fmt.Println(arr) // 10,2,3,4
    }
    
    
  5. 長度是陣列型別的一部分, 在傳遞函式引數是, 需要考慮陣列的長度