2014-01-22 4 views
1

Не могу понять проблему:Интерфейс {} тип понимания

var foo interface{} 
    foo = make(map[string]int) 
    fmt.Println(foo) // map[] 

но

foo["one"] = 1 

prog.go: 10: недопустимая операция: Foo [ "один"] (индекс интерфейса типа {}) [процесс завершен с ненулевым статусом]

Почему это?

ответ

4

foo имеет тип interface{}. Он может содержать карту, но она по-прежнему является интерфейсом.

Для того, чтобы сделать поиск по карте, вам сначала нужно сделать утверждение типа:

foo.(map[string]int)["one"] = 1 

Подробнее о типа утверждения можно найти в Go specifications:

Для выражения х тип интерфейса и тип T, первичное выражение
x. (T)
утверждает, что x не равен нулю и что значение, хранящееся в x, имеет тип T.
Обозначение x. (T) называется утверждением типа .

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