go 數組(array)、切片(slice)、map、結構體(struct)


一 數組(array)

  go語言中的數組是固定長度的。使用前必須指定數組長度。

  go語言中數組是值類型。如果將數組賦值給另一個數組或者方法中參數使用都是復制一份,方法中使用可以使用指針傳遞地址。

  聲明:

var arrayName = [arraySize]dataType{xxx,xxx,xxx....}  //定義全局數組
例如:var b = [10]int{1,2,3,4,5,6,7,8,9,0}
   var b = [10]int{1,2,3,4}                //不足自動補0
arr := [...]int{1,2,3,4,5}
//循環
for _,i := range arr { fmt.Println(i) }

多維數組:

//初始化:
var a = [3][4]int{[4]int{1,2,3},[4]int{1,2,3},[4]int{1,2}} //不足補0
    //創建數組聲明changdu
    var aaa1 = [5]int{1,2,3,4}
    fmt.Println(aaa1)

    //創建數組不聲明長度
    var aaa2 = [...]int{1111,2222,3333,4444,55555,6666}
    fmt.Println(aaa2)

    //創建數組並初始化其中部分
    var aaa3 = [5]string{1:"aaa",2:"bbb"}
    fmt.Println(aaa3)

 

切片(slice)

  指向底層數組的指針。不需要定義長度。和數組在寫法上的區別就是不需要指定長度

  對比:

    v := [2]string{"123","123"}  //數組

    v := []string{"123","123"}  //切片

 

  默念:數組有長度,切片沒長度,數組有長度,切片沒長度......

  如果多個slice指向同一個底層數組,其中一個改變了數組的值,則其他如果包括這個key的值也會改變

  如果slice增加時,導致數組超長,則會再次分配一個新的數組。其他slice可能就會指向這個新的底層數組,這個前一個改變了底層數組的值可能是第一個底層數組,所以第二個slice的key 指向的是第二個底層數組。這點有點混淆。來自無聞視頻教程中講解。

  方法:

    append(arr,1,2,3,4,5)  //將1,2,3,4,5追加到arr中

    slice := arr[開始:結束]  //指向數組中開始到結束的

    copy(arr1,arr2)     //用arr2中的值替代arr1中的值,通過key 對應的代替  copy(arr1[開始:結束],arr2[開始:結束]) 指定替換部位

 

map:

  是一個key=>value的hash結構

  key是除func、slice、map、array外的類型

  聲明初始化  m := map[string]string{}

  賦值一個     m["key1"] = "val1"

  取值     v := m["key1"]

  刪除一個值  d := delete(m,"key1")

  取值的時候可以返回兩個值。另一個可以判斷是否存在

  val,isset := m[2]

struct(結構體)

  個人理解:一種類型;

  例如:

    type person{

      Name string

      ages int

    }

    使用該類型需要定義該類型中兩個屬性

    

所有值傳遞不會改變內存中的值,只有引用類型該可以改變內存中的值

內建函數 make 用來為 slice,map 或 chan 類型分配內存和初始化一個對象(注意:只能用在這三種類型上),第一個參數也是一個類型而不是一個值

func make(t Type,size IntegerType) Type

make slice

var slice_ []int = make([]int,5,10)
fmt.Println(slice_)

var slice_1 []int = make([]int,5)
fmt.Println(slice_1)

var slice_2 []int = []int{1,2}
fmt.Println(slice_2)

打印結果:
[0 0 0 0 0]
[0 0 0 0 0]
[1,2]

make map

var m_ map[string]int = make(map[string]int)
m_["one"] = 1
fmt.Println(m_)

var m map[string]int = map[string]int{"1":1}
m["2"] = 2
fmt.Println(m)

打印結果:
map[one:1]
map[1:1 2:2]

mak channel

var c = make(chan bool)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM