Go语言编程基础 结构体、切片与映射(三)——切片、make

10 切片的默认行为

在进行切片时,可以使用切片的默认行为来忽略上下界。
切片下界的默认值为0,上界则是该切片的长度。

对于数组:

var a [10]int

以下切片等价:

a[0, 10]
a[: 10]
a[0:]
a[:]
package main

import "fmt"

func main()  {
  iii := [4]int{0, 1, 2, 3}

  s1 := iii[:]
  s2 := iii[0:]
  s3 := iii[:4]
  s4 := iii[0:4]

  fmt.Println(s1)
  fmt.Println(s2)
  fmt.Println(s3)
  fmt.Println(s4)
}

11 切片的长度与容量

切片拥有长度与容量。
切片的长度就是其所包含的元素个数。
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数,注意是指数组。
切片s的长度和容量可以通过表达式len(s)与cap(s)来获取。
可以通过重新切片来扩展一个切片的容量。

package main

import "fmt"

func main()  {
  s := []int{1, 2, 3, 4, 5, 1, 1, 1, 1, 1}
  printSlice(s)

  s = s[:0]
  printSlice(s)

  s = s[:4]
  printSlice(s)

  s = s[:2]
  printSlice(s)
  
}

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

12 nil切片

切片的零值为nil
nil切片的长度与容量为0,且没有底层数组。

package main

import "fmt"

func main()  {
  var s []int
  fmt.Println(len(s), cap(s))
  if s == nil {
    fmt.Println(s)
  }
}

13 用make创建切片

切片可以用内建函数make创建。
make函数会分配一个元素为零值的数组并返回一个引用了它的切片:

a := make([]int, 5)

可以向make传入第三个参数用于指定容量

b := make([]int, 0, 5)
b = b[:cap(b)]
b = b[1:]
package main

import "fmt"

func main()  {
  s := make([]int, 5)
  fmt.Println(s, len(s), cap(s))
  ss := make([]int, 0, 5)
  fmt.Println(ss, len(ss), cap(ss))
}

学习源:Go指南

猜你喜欢

转载自blog.csdn.net/qq_32165041/article/details/83858921