go的值类型和引用类型------重要的概念

       在本文中, 我们来简要说一下go的值类型和引用类型, 这很重要。

       在go中,

       值类型有:    int float bool string array等

       引用类型有: slice map channel等

 

       来看个简单的程序:

package main

import (
    "fmt"
)

func main() {
    a :=[6]int{1,2,3,4,5,6}
    b := a
    b[2]=7
    fmt.Println(a, b)
}

        结果:[1 2 3 4 5 6] [1 2 7 4 5 6]

        可以看到a和b不同, 这很好理解, 继续看程序:

package main

import (
    "fmt"
)

func main() {
    a :=[]int{1,2,3,4,5,6}
    b := a
    b[2]=7
    fmt.Println(a, b)
}

       结果是:[1 2 7 4 5 6] [1 2 7 4 5 6]

       a和b居然相同, 仅仅由array变成slice, a和b居然就同时变化, 这是为毛毛? 

       要注意, 这里的a是slice, 是引用类型,  b:=a时, 实际上是b对a的引用, 所以a和b可以理解为是同一个东东。 c/c++的学习这尤其需要注意这点。

 

        再来看个程序:

package main

import (
    "fmt"
)

func fun(m map[string]int){
    m["good"] = 10000;
}

func main() {
    x := make(map[string]int)
    x["good"] = 10
    
    fun(x)
    fmt.Println(x)
}

        熟悉c/c++的人肯定说, 结果是10, 然而,在go中, 是10000, 看看打印的结果:map[good:10000]

        这是为毛毛呢? 因为在go中, map是引用类型, 所以结果如上, c/c++程序员们, 得注意啊。

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值