Z prostym for
pętli:
for _, v := range myconfig {
if v.Key == "key1" {
// Found!
}
}
Należy pamiętać, że od typu element wycinka jest struct
(nie wskaźnik), może być nieskuteczne, jeśli typ struct jest „duży” jako pętla skopiuj każdy odwiedzany element do zmiennej pętli.
Byłoby szybciej używać range
pętlę tylko na indeksie, to unika się kopiowania elementów:
for i := range myconfig {
if myconfig[i].Key == "key1" {
// Found!
}
}
Uwagi:
To zależy od przypadku, czy wielokrotne configs może istnieć z ten sam key
, ale jeśli nie, powinieneś break
z pętli, jeśli znaleziono dopasowanie (aby uniknąć poszukiwania innych).
for i := range myconfig {
if myconfig[i].Key == "key1" {
// Found!
break
}
}
Także jeśli jest to częsta operacja, należy rozważyć budowę map
od niej, które można po prostu indeks, na przykład
// 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
}
Jak config struct wygląda prosty mapie chcę podkreślić, że można dekodować żadnych danych JSON do 'map [łańcuch] interfejs {}'. Jeśli jesteś zainteresowany, checkout [ten oficjalny wpis na blogu] (https://blog.golang.org/json-and-go) – tsabsch