golang参数传递

xxbbdd · · 677 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1 map和slice本身是值传递。但是如果修改他们指向的内容,会影响到函数外。

2 对map和slice的复制,他们底层指向和操作的还是同一对象。

package main

import (
    "fmt"
)
func test2(m map[string]int) {
    m["aaa"] = 10
}
func test4(m map[string]int) {
    m = make(map[string]int)
}

func test3(a []int) {
    a = append(a, 10)
}

func test_mod_slice_content(a []int) {
    a[0] = 10000
}
func test() {
    a := make(map[string]int)
    fmt.Printf("%v\n", a)
    test2(a)
    fmt.Printf("%v\n", a)
    aa := a
    aa["b"] = 20
    fmt.Printf("%v\n", a)
    fmt.Printf("%v\n", aa)
    test4(aa)
    fmt.Printf("%v\n", aa)


    b := make([]int, 0)
    fmt.Printf("%v\n", b)
    test3(b)
    fmt.Printf("%v\n", b)
    b = append(b, 20)
    fmt.Printf("%v\n", b)
    test_mod_slice_content(b)
    fmt.Printf("%v\n", b)




}
func main() {
    test()
}

输出:

map[]
map[aaa:10]
map[b:20 aaa:10]
map[aaa:10 b:20]
map[aaa:10 b:20]
[]
[]
[20]
[10000]

 


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:xxbbdd

查看原文:golang参数传递

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

677 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传