美文网首页
golang-101-hacks(17)——数组和切片的相互转换

golang-101-hacks(17)——数组和切片的相互转换

作者: _羊羽_ | 来源:发表于2019-06-08 23:26 被阅读0次

    在Go中,数组是相同数据类型组成长度固定的连续内存数据结构,slice只是指向底层数组的引用类型。它们是不同的类型,因此不能彼此直接赋值。请看下面的例子:

    package main
    
    import "fmt"
    
    func main() {
        s := []int{1, 2, 3}
        var a [3]int
    
        fmt.Println(copy(a, s))
    }
    
    

    copy函数只能接收切片参数,我们可以使用[:]方式将数组转换成切片,看下面的代码

    package main
    
    import "fmt"
    
    func main() {
        s := []int{1, 2, 3}
        var a [3]int
    
        fmt.Println(copy(a[:2], s))
        fmt.Println(a)
    }
    
    

    运行结果是:

    2
    [1 2 0]
    
    

    上面的例子是将值从切片复制到数组,相反的从数组到切片也是异曲同工:

    package main
    
    import "fmt"
    
    func main() {
        a := [...]int{1, 2, 3}
        s := make([]int, 3)
    
        fmt.Println(copy(s, a[:2]))
        fmt.Println(s)
    }
    
    

    执行结果如下

    2
    [1 2 0]
    
    

    参考
    In golang how do you convert a slice into an array;
    Arrays, slices (and strings): The mechanics of 'append'.

    相关文章

      网友评论

          本文标题:golang-101-hacks(17)——数组和切片的相互转换

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