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值進行刷新的動作了。
此爲個人理解,如果有錯誤之處請求留言指出,本人好加以修正,謝謝!