zoukankan      html  css  js  c++  java
  • Go parameter passing

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	fmt.Println("Hello, playground")
    	
    	var str string = "1241341"
    	fmt.Println(&str)
    	fmt.Println(MyString(str))
    	
    	m := map[string]string {"A": "A"}
    	fmt.Printf("m before %p
    ", &m)
    	modify(m)
    	fmt.Println("m val: ", m["A"])
    }
    
    func MyString(v string) *string {
    	return &v
    }
    
    func modify(m map[string]string) {
    	fmt.Printf("m after %p
    ", &m)
    	m["A"] = "B"
    }
    

      

    Hello, playground
    0x1040c130
    0x1040c138
    m before 0x1040c140
    m after 0x1040c148
    m val:  B

    结论:
    1)golang参数传递都是值传递,即会复制一份副本。
    2)值传递为何会改变了map?
    sclice、map、chan、interface和function都属于引用类型,引用类型复传参时复制的是一份指针,其指向底层数据结构相同。因此可改变之。

    update:
    闭包,传递的是引用。其实不用记,想想就应该这样
  • 相关阅读:
    JS高级拖拽
    JS高级Date类
    JS高级闭包
    JS笔记整理
    JS高级解决函数内的this指向
    JS高级事件委托
    JS高级 事件对象
    JS中级面向对象
    JS中级
    JS高级
  • 原文地址:https://www.cnblogs.com/gm-201705/p/8341866.html
Copyright © 2011-2022 走看看