go語言 對數組 切片的理解

package main

import "fmt"

func modify(array [5]int){
   array[0]=10
   fmt.Println("----------",array)
}


func main(){
    array:=[5]int{1,2,3,4,5}
    modify(array)
    //:數組的長度在定義之後無法再次修改;數組是值類型,
  //   每次傳遞都將產生一份副本
    fmt.Println("========",array)

    /*
    數組切片就像一個指向數組的指針,實際上它擁有自己的數據結構,而不僅僅是
   個指針。數組切片的數據結構可以抽象爲以下3個變量:
    一個指向原生數組的指針;
    數組切片中的元素個數;
    數組切片已分配的存儲空間
    */
    //創建數組切片 兩種形式 基於數組和直接創建
    //1.基於數組
    //定義數組 var  定義  := 賦值
    var  myArray = [10]int{1,2,3,4,5,6,7,8,9,10}
    //基於數組創建一個切片
   var mySlice []int=myArray[2:5]
   fmt.Println("Elements of myArray: ")
   for _, v := range myArray {
      fmt.Print(v, " ")
   }
   fmt.Println("\nElements of mySlice: ")
   for _, v := range mySlice {
      fmt.Print(v, " ")
   }
   fmt.Println()

   //2.直接創建切片
   //可以使用 make 這個函數創建數組切片
   //創建一個初始元素個數爲5的數組切片元素初始值爲0:
   mySlice1 :=make([]int,5)
   fmt.Println(mySlice1)

   //創建一個初始元素個數爲5的數組切片,元素初始值爲0,並預留10個元素的存儲空間:
   mySlice2 :=make([]int,5,10)
   fmt.Println(mySlice2)
   //直接創建並初始化包含5個元素的數組切片:
   mySlice3 := []int{1, 2, 3, 4, 5}
   fmt.Println(mySlice3)

   //元素遍歷
   for i:=0;i<len(mySlice);i++{
      fmt.Println("key",i,"-----","val",mySlice[i])
   }

   //可以使用 range 關鍵字 讓遍歷代碼更簡潔
   for k,v:=range mySlice{
      fmt.Println("key",k,"=========","val",v)
   }


   //動態增減元素
   //可動態增減元素是數組切片比數組更爲強大的功能
   //數組切片多了一個存儲能力
   fmt.Println("len長度:",len(mySlice2))
   //獲取數組的的空間大小
   fmt.Println("cap空間大小:",cap(mySlice2))

   //繼續追加元素
   //一個一個追加
   mySlice2 = append(mySlice2,11,12)
   fmt.Println(mySlice2)
   //數組追加
   /*
   在第二個參數mySlice2後面加了三個點,即一個省略號,如果沒有這個省
   略號的話,會有編譯錯誤,因爲按append()的語義,從第二個參數起的所有參數都是待附加的
   元素。因爲mySlice中的元素類型爲int,所以直接傳遞mySlice2是行不通的。加上省略號相
   當於把mySlice2包含的所有元素打散後傳入。
   */
   mySlice4 :=[]int{13,14}
   mySlice2=append(mySlice2,mySlice4...)
   fmt.Println(mySlice2)

   //內容複製
   //數組切片支持GO語言的另一個內置函數 copy 用於將內容從一個數組切片複製到另一個
   //數組切片。如果加入的兩個數組切片不一樣大,就會按其中較小的那個數組切片的元素個數進行復制
   slice1 :=[]int{1, 2, 3, 4, 5}
   slice2 :=[]int{5, 4, 3}
   copy(slice1,slice2)//只會複製slice2的3個元素到slice1的前3個位置
   copy(slice2,slice1) // 只會複製slice1的前3個元素到slice2中


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章