golang的map[string][]string的技巧
阿新 • • 發佈:2020-07-14
類似於這種map slice結構,理論上基本都可以這麼使用。
需求
替換或者修改切片中的數值,直接修改切片就好,不需要重新賦值。前提是不能改變切片大小。
程式碼如下:
import ( "fmt" ) func CheckMaoSlice() { funcMap := map[string][]string{ "1111": []string{"2222", "333333"}, "11115": []string{"2ooo222", "33ooo3333"}, } fmt.Println(funcMap) funcMap1 := map[string]string{ "2ooo222": "33333fefe", } for _, funcSlice := range funcMap { for loc, funcName := range funcSlice { if v, ok := funcMap1[funcName]; ok { funcSlice[loc] = v } } } fmt.Println(funcMap) }
輸入如下:
map[1111:[2222 333333] 11115:[2ooo222 33ooo3333]]
map[1111:[2222 333333] 11115:[33333fefe 33ooo3333]]
解析
funcSlice 這是一個string的切片,底層和funcMap[key]的值時共用一個地址的,所以直接修改funcSlice就能修改map中切片的值。就類似於如下程式碼:
g:=[]string{11,2,3,4,45,6}
c=g[1:]
g和c目前有部分是公用的,修改c就能修改g,前提是不能擴容c。