2015-01-07 2 views
3

У меня есть карта, которая имеет ноль-ключом значение:Как получить доступ к ключевому слову карты с использованием отражения?

mapp := map[interface{}]interface{}{ 
    nil: "a", 
} 

Доступ это ноль ключа непосредственно работает:

fmt.Println("key[nil]:", mapp[nil]) 

Но использование отражения не - как это сделать?

rmapp := reflect.ValueOf(mapp) 
rkey := reflect.ValueOf(interface{}(nil)) 
rval := rmapp.MapIndex(rmapp.MapIndex(rkey)) 
fmt.Println("key[nil]:", rval) 

Неработающий код здесь:
https://play.golang.org/p/6TKN_tDNgV

ответ

2

недостающую часть похоже, был нулевое значение ключевого типа карты, которое необходимо для доступа к ключу nil на карте.

refmap.MapIndex(reflect.Zero(refmap.Type().Key())) 

playground example

5

Вот один из способов создать reflect.Value для nil значения типа interface{}:

rkey := reflect.ValueOf(new(interface{})).Elem() 

playground example

+0

Спасибо, но это решение нужно знать тип ключа карты содержат в во время компиляции, и, следовательно, не может с другими ключевыми типами. – Gima

 Смежные вопросы

  • Нет связанных вопросов^_^