1. 程式人生 > 實用技巧 >go 學習之切片

go 學習之切片

切片是陣列的一個引用,因此切片是引用型別,在進行傳遞時,遵守引用傳遞的機制

切片的長度是可以變化的,因此切片是一個可以動態變化陣列

切片的記憶體空間存放三塊內容,第一塊是陣列的地址,第二塊是陣列的長度,第三塊是陣列的容量

切片可以繼續切片

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也會建立一個數組,是由切片在底層維護,程式設計師是看不見的