go基础——数值传递与值传递

package main

import "fmt"

/*
1.值类型:存储的是数值本身,数据传递给其他变量时传递的是数据的副本。
        int,float,string,bool,array,struct
2.引用类型:存储的是数据的内存地址,数据传递时传递的地址。默认零值是nil
        slice,map,channel,function,pointer
*/
func main() {
        s1 := []int{1, 2, 3, 4}
        s2 := make([]int, 0)
        s2 = append(s2, s1...) //数值传输
        s3 := s1               //地址传输
        fmt.Println(s1, s2, s3)

        s1[0] = 100
        fmt.Println(s1, s2, s3)

        //copy()
        s4 := []int{1, 2, 3, 4}
        s5 := []int{7, 8, 9}
        //copy(s4, s5)  //将s5中的元素复制到s4中,覆盖对应位置
        copy(s4[1:], s5[1:])
        fmt.Println(s4, s5)

}

执行结果

[1 2 3 4] [1 2 3 4] [1 2 3 4]
[100 2 3 4] [1 2 3 4] [100 2 3 4]
[1 8 9 4] [7 8 9]