type Config struct Key string Value string}// I form a slice of the above structvar myconfig []Config // unmarshal a response body into the above sliceif err := json.Unmarshal(respbody,&myconfig); err != nil panic(err)}fmt.Println(config)3 D" Z. ]7 _$ {) }$ x6 K/ @
如何搜索这个数组获取元素 where key="key1"?5 ~4 U5 p$ y4 ^+ d
3 X) Z$ K( Z4 d- ~6 ]; z' z解决方案: # C O, l8 t5 I/ D6 i7 Q8 Z( k) |2 a
用简单的for循环: e9 i* Q$ C! \0 Q+ I; d
. l$ u* Z' w3 e! ~
for _,v := range myconfig if v.Key == "key1" // Found! code]请注意,因为切片的元素类型是 a struct(不是指针),如果结构类型大) E0 G- ]2 b3 Y; W
range只在索引上使用循环更快,以避免复制元素: . m0 H; ~0 D# x
[code]for i := range myconfig if myconfig.Key == "key1" // Found! code]笔记: 1 m! M3 ? b* w( I( T$ T% O( r" A Y
这取决于你的情况,多个配置是否可能相同key,但如果没有,break如果找到匹配项,应退出循环(避免搜索其他配置)。7 y5 `" H m' p
[code]for i := range myconfig if myconfig.Key == "key1" // Found! break code]另外,如果这是一个频繁的操作,你应该考虑map构建一个你可以简单索引的,比如[code]// Build a config map:confMap := map[string]string{}for _,v := range myconfig confMap[v.Key] = v.Value}// And then to find values by key:if v,ok := confMap["key1"]; ok // Found} ' k2 m0 U# V: ?1 X2 P5 E