Метод reflect.Value.MapIndex
Метод reflect.Value.MapIndex позволяет получить значение элемента карты по указанному ключу. Он возвращает reflect.Value, представляющее значение, связанное с ключом. Если ключ отсутствует в карте, метод возвращает нулевое значение reflect.Value (его метод IsValid вернет false). Первым параметром метод принимает ключ в виде reflect.Value, а возвращает reflect.Value — значение по этому ключу.
Синтаксис
value := mapValue.MapIndex(keyValue)
Пример
Давайте получим значение из карты по ключу "name":
package main
import (
"fmt"
"reflect"
)
func main() {
m := map[string]int{
"age": 25,
"year": 2023,
}
val := reflect.ValueOf(m)
key := reflect.ValueOf("age")
res := val.MapIndex(key)
if res.IsValid() {
fmt.Println(res.Int())
} else {
fmt.Println("key not found")
}
}
Результат выполнения кода:
25
Пример
Давайте попробуем получить значение по несуществующему ключу:
package main
import (
"fmt"
"reflect"
)
func main() {
m := map[string]int{
"age": 25,
}
val := reflect.ValueOf(m)
key := reflect.ValueOf("city")
res := val.MapIndex(key)
if res.IsValid() {
fmt.Println(res.Int())
} else {
fmt.Println("key not found")
}
}
Результат выполнения кода:
key not found
Пример
Давайте используем карту со сложным типом ключа (структура):
package main
import (
"fmt"
"reflect"
)
type Point struct {
X, Y int
}
func main() {
m := map[Point]string{
{1, 2}: "first",
{3, 4}: "second",
}
val := reflect.ValueOf(m)
key := reflect.ValueOf(Point{1, 2})
res := val.MapIndex(key)
if res.IsValid() {
fmt.Println(res.String())
}
}
Результат выполнения кода:
first
Смотрите также
-
функцию
reflect.ValueOf,
которая создаетreflect.Valueиз любого значения -
метод
reflect.Value.MapKeys,
который возвращает все ключи карты -
метод
reflect.Value.Kind,
который возвращает тип значения -
функцию
reflect.MakeMap,
которая создает новую карту указанного типа