在日常使用Go语言中,有时候我们会需要将数组转换成切片或者将切片转换成数组。

虽然slice切片在底层也是引用了数组,但是他们在定义上还是不同的类型所以彼此之间是不能直接复制的。

一、循环赋值

循环赋值是大家容易想到的方法了,既然不能直接整体赋值那么我把值取出来在插入新的类型里不就好了么。

数组给切片赋值

package main

import "fmt"

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

    fmt.Println(s)
    for _, elem := range array {
       s= append(s,elem)
    }
    fmt.Println(s)
}

切片给数组赋值

package main

import "fmt"

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

    fmt.Println(array)
    for index, elem := range s {
       array[index]=elem
    }
    fmt.Println(array)
}

二、使用COPY赋值

copy函数是将于将内容从一个数组切片复制到另一个数组切片,如果带入数组参数是无法通过编译的所以我们这边要使用[:]来把数组「伪装」成一个切片。

Copy(dst,src) 将src的值全部复制到dst中。

数组给切片赋值

package main

import "fmt"

func main() {
    array:= [3]int{1,2,3}
    //如果加入的两个数组切片不一样大,就会按其中较小的那个数组切片的元素个数进行复制所以要先声明slice切片的长度,否则会无法赋值。
    s := make([]int, len(array))
    
    fmt.Println(s)
    copy(s,array[:])
    fmt.Println(s)
}

切片给数组赋值

package main

import "fmt"

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

    fmt.Println(array)
    copy(array[:],s)
    fmt.Println(array)
}

更多go语言学习资料欢迎访问 golangroadmap.com ,网站邀请码:Gopher-243-6981

如果你觉得本文对你有所帮助欢迎点赞、收藏、评论~