GO語言學習之-數組和切片(一)

數組定義:

1.用var定義(必須給定長度)
    eg: var arr [3] int
2.如果用 := (必須定義初值
eg: arr := [3]int{1,2,3}
3.數組長度定義爲[...] ,這樣可以不用寫數字來定義長度,它會根據初值自動給與長度。否則數組必須定義長度
arr3 := […]int {1,2,3,4,5,6}

切片定義:

最簡單的理解:空的數組就是切片 (我個人就是這樣來理解)

  eg:    var arr [] int    不定義長度和初始值

對比來解釋:

  1. 數組它是值類型 ,而切片時指針類型,
  2. 一般初始化的時候數組的長度液晶是固定的了,而切片不是,它是一個動態的數組切片的底層是數組,而切片的底層是數組

關於循環:

數組循環有2種方式:

一:遍歷:

  eg: arr := [3]int{1,2,3}

for i:=0 ; i<len(arr);i++{

fmt.Println(arr[i])
}

二:使用關鍵字:range

for i,v :=range(arr){   // i爲index,v爲值
fmt.Println(i,v)
}

注意點:  函數傳遞時傳遞數組,那就必須要傳遞一個數組長度相同的數組變量,因此 在實際開發中 ,我們常用的是切片

make與new 區別:

new

new 可以用來初始化泛型,並且返回儲存位址。所以通常我們會用指針變數來接收 new 過後。特別注意的是,

new 會自動初始化類型,也就是字串會是"",number 會是 0,而 channel, func, map, slice 等等則會是 nil。

因爲這個特性,如果我們對 map 做以下的操作的話,會出現 panic: assignment to entry in nil map

func main() {
    user := new(map[string]string)
    u := *user
    u["name"] = "csq" // panic: assignment to entry in nil map
}

錯誤的原因:

    初始化的 map 默認是 nil map,所以直接使用就會報assignment to entry in nil map 的錯誤。

如果用 struct 做初始化,也可以直接用 & 代表指向的地址

ype User struct {
  Name string
  Age  int
}

func main() {
    p := &User{} //這個可以自定義屬性
   //或者
    p := new(User)//這個全部講屬性賦予進去
}

make

make 與 new 不同,是用來初始化 channel, map, slice 等等。另外特別要注意的是 make 並不會傳回指針,如果要拿到指針,就要考慮用像是 new 的方式來初始化.

func main() {
    
    user := make(map[string]string)
    user := make([]string, 100) // 初始化長度 100 
}

func main() {
    user := make(map[string]string)
    fmt.Println(*user) // invalid indirect of user 報錯

}

  報錯原因:

      make 並不會傳回指針.

 

 

 

 


 

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