go 學習之切片
阿新 • • 發佈:2020-12-16
切片是陣列的一個引用,因此切片是引用型別,在進行傳遞時,遵守引用傳遞的機制
切片的長度是可以變化的,因此切片是一個可以動態變化陣列
切片的記憶體空間存放三塊內容,第一塊是陣列的地址,第二塊是陣列的長度,第三塊是陣列的容量
切片可以繼續切片
append動態新增內容到切片,返回新建立的切片(底層陣列也重新建立),如果是將一個切片追加到另一個切片 newSlice = append(slice, slice...)
遍歷的兩種方式:for,for-range
copy(a, b)完成切片複製操作,相互獨立,互不影響 。長度不夠時不會報錯(len(a)<len(b)),只拷貝len(a)個元素
建立切片的三種方式:
1、定義一個切片,然後讓切片去應用一個已建立好的陣列
arr := [5]int{1, 3, 5, 7, 9} slice := arr[1:3] fmt.Println(slice)
2、通過make來建立切片
slice := make([]int, 5, 8) slice = []int{1, 3, 5, 7} fmt.Println(slice)
3、簡寫建立方式:
slice := []int{1, 3, 5, 7} fmt.Println(slice)
slice 與string:
a、string底層是byte陣列,因此string也可以進行切片處理
b、string是不可變的,也就是說不能通過str[0] = 'a'方式來修改字串
c、如果要修改字串,可以先將string -> []byte 或者string -> []rune 修改重寫成string
通過切片方式修改字串內容
str := "hello world" str1 := []byte(str) str1[0] = 'H' str2 := string(str1) fmt.Println(str2)
str := "hello world" str1 := []rune(str) str1[0] = '我' str2 := string(str1) fmt.Println(str2)
總結:
通過make方式建立切片可以指定切片的大小和容量
如果沒有給切片的各個元素賦值,那麼就會使用預設值(0,“”, false)
通過make方式建立切片對應的陣列是由make底層維護,對外不可見,即只能通過slice去訪問各個元素
方式1和方式2的區別:
方式1是直接引用陣列,這個陣列是事先存在的,程式設計師是可見的
方式2是通過make來建立切片,make也會建立一個數組,是由切片在底層維護,程式設計師是看不見的