Latest web development tutorials

Go Bahasa slice (slice)

slice Go Bahasa adalah array abstraksi.

Pergi panjang array tidak dapat diubah, sehingga koleksi tidak berguna dalam skenario tertentu, Go menyediakan fleksibel, kuat built-in bagian jenis ( "array dinamis"), dibandingkan dengan panjang array slice tidak tetap , elemen dapat ditambahkan ketika kapasitas tambahan meningkat dapat membuat irisan.


slice didefinisikan

Anda dapat mendeklarasikan array dari ukuran yang tidak ditentukan untuk menentukan potongan:

var identifier []type

Diiris panjang jelas.

Atau untuk membuat sepotong menggunakan membuat () fungsi:

var slice1 []type = make([]type, len)

也可以简写为

slice1 := make([]type, len)

Anda juga dapat menentukan kapasitas, di mana kapasitas adalah opsional.

make([]T, length, capacity)

Berikut len ​​adalah panjang dari array dan juga panjang awal dari potongan.

slice inisialisasi

s :=[] int {1,2,3 } 

bagian inisialisasi langsung [] merupakan jenis slice, {1,2,3} nilai inisialisasi diikuti oleh 1,2,3 cap-nya = len = 3

s := arr[:] 

Inisialisasi slice s, adalah referensi ke arr array yang

s := arr[startIndex:endIndex] 

Ini akan membuat slice baru untuk elemen pada indeks startIndex endIndex 1-under di arr

s := arr[startIndex:] 

Elemen terakhir harus arr default ketika endIndex

s := arr[:endIndex] 

Menunjukkan mulai dari elemen pertama dari arr waktu default startIndex

s1 := s[startIndex:endIndex] 

Slice dengan irisan s initialize s1

s :=make([]int,len,cap) 

Melalui built-in fungsi make () Menginisialisasi slice s, [] int mengidentifikasi unsur-unsur dari jenis irisan int


len () dan cap () fungsi

Slice diindeks dan dapat diperoleh dengan metode panjang len ().

Sepotong menyediakan metode untuk menghitung cap kapasitas () dapat diukur sampai jumlah maksimum iris.

Berikut ini contoh-contoh spesifik:

package main

import "fmt"

func main() {
   var numbers = make([]int,3,5)

   printSlice(numbers)
}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

Jalankan contoh di atas output:

len=3 cap=5 slice=[0 0 0]

Kosong (nihil) iris

Sepotong sebelum standar diinisiasi adalah nihil, panjang 0, contoh adalah sebagai berikut:

package main

import "fmt"

func main() {
   var numbers []int

   printSlice(numbers)

   if(numbers == nil){
      fmt.Printf("切片是空的")
   }
}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

Jalankan contoh di atas output:

len=0 cap=0 slice=[]
切片是空的

slice intersepsi

Anda dapat mengatur mencegat slice [rendah-terikat: batas atas ] dengan menetapkan bawah dan atas, contoh adalah sebagai berikut:

package main

import "fmt"

func main() {
   /* 创建切片 */
   numbers := []int{0,1,2,3,4,5,6,7,8}   
   printSlice(numbers)

   /* 打印原始切片 */
   fmt.Println("numbers ==", numbers)

   /* 打印子切片从索引1(包含) 到索引4(不包含)*/
   fmt.Println("numbers[1:4] ==", numbers[1:4])

   /* 默认下限为 0*/
   fmt.Println("numbers[:3] ==", numbers[:3])

   /* 默认上限为 len(s)*/
   fmt.Println("numbers[4:] ==", numbers[4:])

   numbers1 := make([]int,0,5)
   printSlice(numbers1)

   /* 打印子切片从索引  0(包含) 到索引 2(不包含) */
   number2 := numbers[:2]
   printSlice(number2)

   /* 打印子切片从索引 2(包含) 到索引 5(不包含) */
   number3 := numbers[2:5]
   printSlice(number3)

}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

Mengeksekusi hasil kode output di atas:

len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8]
numbers == [0 1 2 3 4 5 6 7 8]
numbers[1:4] == [1 2 3]
numbers[:3] == [0 1 2]
numbers[4:] == [4 5 6 7 8]
len=0 cap=5 slice=[]
len=2 cap=9 slice=[0 1]
len=3 cap=7 slice=[2 3 4]

append () dan copy () function

Jika Anda ingin meningkatkan kapasitas slice, kita harus membuat slice baru dan lebih besar dari fragmen asli konten tersebut disalin.

Kode berikut menggambarkan copy dari slice dan metode copy untuk menambahkan elemen baru untuk menambahkan metode slice.

package main

import "fmt"

func main() {
   var numbers []int
   printSlice(numbers)

   /* 允许追加空切片 */
   numbers = append(numbers, 0)
   printSlice(numbers)

   /* 向切片添加一个元素 */
   numbers = append(numbers, 1)
   printSlice(numbers)

   /* 同时添加多个元素 */
   numbers = append(numbers, 2,3,4)
   printSlice(numbers)

   /* 创建切片 numbers1 是之前切片的两倍容量*/
   numbers1 := make([]int, len(numbers), (cap(numbers))*2)

   /* 拷贝 numbers 的内容到 numbers1 */
   copy(numbers1,numbers)
   printSlice(numbers1)   
}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

output kode di atas dijalankan:

len=0 cap=0 slice=[]
len=1 cap=2 slice=[0]
len=2 cap=2 slice=[0 1]
len=5 cap=8 slice=[0 1 2 3 4]
len=5 cap=16 slice=[0 1 2 3 4]