zoukankan      html  css  js  c++  java
  • go 指针(interface{},map)

    func testAddDataToResult() {
    	var a map[string]interface{}
    	Println(a, &a)
    	addDataToResult(a, "aa", "bb")
    	Println(a, &a)
    }
    func addDataToResult(result map[string]interface{}, key string, val interface{}) {
    	if result == nil {
    		Println("nil result:", result, &result)
    		result = map[string]interface{}{key: val}
    		//result[key] = val
    		Println("nil result:", result, &result)
    		return
    	}
    	result[key] = val
    	Println("result:", result, &result)
    }
    结果

    map[] &map[]
    nil result: map[] &map[]
    nil result: map[aa:bb] &map[aa:bb]
    map[] &map[]
    	var a map[string]interface{}
    	Println(a, &a)
    	addDataToResult(a, "aa", "bb")
    	Println(a, &a)
    }
    func addDataToResult(result map[string]interface{}, key string, val interface{}) {
    	if result == nil {
    		Println("nil result:", result, &result)
    		//result = map[string]interface{}{key: val}
    		result[key] = val
    		Println("nil result:", result, &result)
    		return
    	}
    	result[key] = val
    	Println("result:", result, &result)
    }
    结果
    map[] &map[]
    nil result: map[] &map[]
    panic: assignment to entry in nil map
    

      

    func testAddDataToResult() {
    	var a = map[string]interface{}{}
    	Println(a, &a)
    	addDataToResult(a, "aa", "bb")
    	Println(a, &a)
    }
    func addDataToResult(result map[string]interface{}, key string, val interface{}) {
    	if result == nil {
    		Println("nil result:", result, &result)
    		//result = map[string]interface{}{key: val}
    		result[key] = val
    		Println("nil result:", result, &result)
    		return
    	}
    	result[key] = val
    	Println("result:", result, &result)
    }
    结果
    map[] &map[]
    result: map[aa:bb] &map[aa:bb]
    map[aa:bb] &map[aa:bb]
    

      

    第一个测试将nil值的map[string]interface{}传到函数,修改后原函数里的值没改变

    第二个测试将nil值的map[string]interface{}传入到函数,直接result[key]=val,panic: assignment to entry in nil map

     第三个测试将不为nil值的map[string]interface{}传入到函数,直接result[key]=val,原函数的map被改变了

    func testAddDataToResult() {
    	var a interface{}
    	Println(a, &a)
    	addDataToResult(a, "aa", "bb")
    	Println(a, &a)
    }
    func addDataToResult(result interface{}, key string, val interface{}) {
    	if result == nil {
    		Println("nil result:", result, &result)
    		result = map[string]interface{}{key: val}
    		Println("nil result:", result, &result)
    		return
    	}
    	result.(map[string]interface{})[key] = val
    	Println("result:", result, &result)
    }
    结果
    <nil> 0xc42000e280
    nil result: <nil> 0xc42000e290
    nil result: map[aa:bb] 0xc42000e290
    <nil> 0xc42000e280
    

      

  • 相关阅读:
    spring + junit 测试
    备份mysql数据库
    JAVA访问Zabbix API
    pro git 读书笔记 3 Git 分支
    pro git 读书笔记 1
    pro git 读书笔记 2
    溢出和剪裁,可见性
    html 与 jsp 文件格式区别
    Eclipse 的 CheckStyle 插件
    【转】单元测试覆盖率
  • 原文地址:https://www.cnblogs.com/cdyboke/p/7141373.html
Copyright © 2011-2022 走看看