12-Golang值类型和引用类型

值类型和引用类型的差异在于赋值同类型新变量后,对新变量进行修改是否能够影响原来的变量,若不能影响则为值类型,若能影响则为引用类型。

值类型是值拷贝,引用类型是公用底层数据。

package main

import "fmt"

func main() {
    //数组是值类型
    slice01 := []int{1, 2, 3}
    slice02 := slice01
    fmt.Println(slice01, slice02)
    slice02[1] = 100
    fmt.Println(slice01, slice02)

    array01 := [3]int{}
    array02 := array01
    fmt.Println(array01, array02)
    array02[1] = 100
    fmt.Println(array01, array02)
}

值类型:数值、布尔、字符串、指针、数组、结构体等。
引用类型:切片、映射、接口等。

针对值类型可以借助指针修改原值。

针对值类型和引用类型在赋值后新旧变量的地址并不相同,只是引用类型在底层共享数据结构(其中包含指针类型元素)。

package main

import "fmt"

func main() {
    // 值类型: string int bool float array 指针 结构体
    // 引用类型: slice map 接口
    // 将变量赋值给一个新的变量,并修改新变量的值,如果对旧变量有影响就是引用类型,无影响就是值类型
    // 针对值类型可借助指针修改原值
    // 值类型和引用类型在赋值后新旧变量地址并不相同,只是引用类型在底层共享数据结构
    string01 := "B"
    string02 := string01
    string02 = "C"
    fmt.Println(string01, string02)

    int01 := 1
    int02 := int01
    int02 = 2
    fmt.Println(int01, int02)

    bool01 := true
    bool02 := bool01
    bool02 = false
    fmt.Println(bool01, bool02)

    array01 := [3]string{"A", "B", "C"}
    array02 := array01
    array02[2] = "D"
    fmt.Println(array01, array02)

    slice01 := []string{"A", "B", "C"}
    slice02 := slice01
    slice02[2] = "D"
    fmt.Println(slice01, slice02)

    map01 := map[string]int{"a": 1, "b": 2}
    map02 := map01
    map02["b"] = 3
    fmt.Println(map01, map02)

    age01 := 30
    age02 := age01
    age02 = 31
    fmt.Println(age01, age02)
    pointer := &age01
    *pointer = 31
    fmt.Println(age01, age02, *pointer)
}

值传递

package main

import "fmt"

func changeInt(a int) {
    a = 100
}

func changeSlice(s []int) {
    s[0] = 100
}

func changeIntByPoint(p *int) {
    *p = 100
}

func main() {
    //go中都是值传递
    num := 1
    changeInt(num)
    fmt.Println(num)

    // 引用类型底层是共享内存
    nums := []int{1, 2, 3}
    changeSlice(nums)
    fmt.Println(nums)

    changeIntByPoint(&num)
    fmt.Println(num)
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容