首页 > 其他 > 详细

Go 切片

时间:2020-04-25 22:17:09      阅读:49      评论:0      收藏:0      [点我收藏+]

切片的定义

切片的声明

func main() {
    // 声明切片类型
    var a []string              //声明一个字符串切片
    var b = []int{}             //声明一个整型切片并初始化
    var c = []bool{false, true} //声明一个布尔切片并初始化
    var d = []bool{false, true} //声明一个布尔切片并初始化
    fmt.Println(a)              //[]
    fmt.Println(b)              //[]
    fmt.Println(c)              //[false true]
    fmt.Println(a == nil)       //true
    fmt.Println(b == nil)       //false
    fmt.Println(c == nil)       //false
    // fmt.Println(c == d)   //切片是引用类型,不支持直接比较,只能和nil比较
}

 

切片的长度和容量

切片拥有自己的长度和容量, 我们可以使用内置的 len() 函数求长度,使用内置的 cap() 函数求切片的容量。

切片表达式

简单切片表达式

func main() {
     a := [5]int{1,2,3,4,5}
     s := a[1:3]  
     fmt.Printf("%s:%v len(s):%v cap(s):%v\n",s,len(s),cap(s))
}

// 输出:
// s:[2 3]   len(s):2     cap(s):4

 

对切片在执行切片(切片再切片)

func main() {
    a := [5]int{1, 2, 3, 4, 5}
    s := a[1:3]  // s := a[low:high]
    fmt.Printf("s:%v len(s):%v cap(s):%v\n", s, len(s), cap(s))
    s2 := s[3:4]  // 索引的上限是cap(s)而不是len(s)
    fmt.Printf("s2:%v len(s2):%v cap(s2):%v\n", s2, len(s2), cap(s2))
}

//结果:
//s:[2 3] len(s):2 cap(s):4
//s2:[5] len(s2):1 cap(s2):1

 

完整切片表达式

对于数组,指向数组的指针,或切片a(注意不能是字符串) 支持完整切片表达式:

a[low : high : max]

 最终得到的结果切片容量设置为max-low。 在完整切片表达式中只有第一个索引值(low) 可以省略。它默认为0.

func main() {
     a := [5]int{1, 2, 3, 4, 5}
     t := a[1:3:4]
     fmt.Printf("t:%v len(t):%v cap(t):%v\n", t, len(t), cap(t))    
}

//输出结果:
t:[2 3] len(t):2 cap(t):3

 

 使用make()函数构造切片

上面都是基于数组来创建的切片,如果要动态的创建一个切片,我们就需要使用内置的 make()函数

例:

func main() {
    a := make([]int, 2, 10)
    fmt.Println(a)                  //[0 0]
    fmt.Println(len(a))           //2
    fmt.Println(cap(a))          //10
}

 

Go 切片

原文:https://www.cnblogs.com/s686zhou/p/12775614.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!