美文网首页
GO语言切片

GO语言切片

作者: Gaterny | 来源:发表于2018-11-29 18:50 被阅读0次
    // 切片也是一种数据结构,它和数组非常相似,因为他是围绕动态数组的概念设计的,可以按需自动改变大小,使用这种结构,可以更方便的管理和使用数据集合。
    // 切片对象非常小,因为只有3个字段的数据结构:一个是指向底层数组的指针,一个是切片的长度,一个是切片的容量。
    package main
    
    import "fmt"
    
    func main() {
        // make创建切片,make([]type, length)
        slice := make([]int, 5)
        fmt.Println(slice)
    
        // 指定值
        slice1 := []int{1, 2, 3, 4, 5}
        fmt.Println(slice1)
    
        // 指定固定索引的值
        slice2 := []int{3:9}
        fmt.Println(slice2)
    
        // nil切片
        var nilSlice []int
        fmt.Println(nilSlice)
    
        // 空切片
        emptySlice := []int{}
        fmt.Println(emptySlice)
    
        // 切片操作
        slice3 := slice1[1:3]
        fmt.Println(slice3)
    
        // append添加元素,原切片的容量足够时,不会创建新的切片,直接在原切片上修改
        // slice4和newSlice共用底层数组
        slice4 := []int{1, 2, 3, 4, 5}
        newSlice := slice4[1:3]
        newSlice = append(newSlice, 5)
        fmt.Println(newSlice, slice4)   // [2 3 5] [1 2 3 5 5]
    
        // 切片的底层数组,没有足够的容量时,就会新建一个底层数组,把原来数组的值复制到新底层数组里,再追加新值,这时候就不会影响原来的底层数组了
        slice5 := []int{1, 2, 3}
        slice6 := append(slice5, 6, 7, 8)
        fmt.Println(slice5, slice6)  //[1 2 3] [1 2 3 6 7 8]
    
        // 追加整个切片使用...
        slice7 := append(slice5, slice6...)
        fmt.Println(slice7)   // [1 2 3 1 2 3 6 7 8]
    }
    
    // 取值方法和数组一样,也是通过索引,超过长度会报错
    
    
    

    相关文章

      网友评论

          本文标题:GO语言切片

          本文链接:https://www.haomeiwen.com/subject/qdafcqtx.html