package main
import (
"fmt"
"strings"
)
func main() {
tt := "aa, bb, cc, dd"
res := make(map[string]interface{})
ret := make([]map[string]interface{}, 0)
fmt.Println("start-->ret",ret)
for k,v := range strings.Split(tt, ",") {
//res := make(map[string]interface{})
fmt.Println(k,"for--1-->ret:", ret)
res["name"] = v
fmt.Println(k,"for--2-->ret:", ret)
//ret = append(ret, map[string]interface{}{"name":v})
ret = append(ret, res)
fmt.Println(k,"for--res:", res)
fmt.Println(k,"for--3-->ret:", ret)
}
fmt.Println("end-->ret:", ret)
运行结果为:
结果就是追加res的值时,会同时刷新之前的值,而此时如果将
ret = append(ret, res)
注释,而将
//ret = append(ret, map[string]interface{}{"name":v})
放开的话,得到理想结果:
如果实际工作中必须要用到变量例如res来进行append呢,此时该怎么办?那就是将一开始定义的全局res注释掉,改成到for循环里面去进行定义,当res成为局部变量之后,每次循环结束之后进入新的循环时对res进行了重新定义,就不会出现对之前的res值进行刷新的动作了。
此为个人理解,如果有错误之处请求留言指出,本人好加以修正,谢谢!