Что означает синтаксис "точка скобок" в Голанге?
Я изучаю пример приложения Go, которое хранит данные в mongodb. Код в этой строке (https://github.com/zeebo/gostbook/blob/master/context.go#L36), по-видимому, обращается к идентификатору пользователя, хранящемуся в сеансе гориллы:
if uid, ok := sess.Values["user"].(bson.ObjectId); ok {
...
}
Кто-нибудь, пожалуйста, объясните мне синтаксис здесь? Я понимаю, что sess.Values["user"]
получает значение из сеанса, но какая часть следует за этим? Почему выражение после точки в скобках? Это вызов функции?
Ответы
Ответ 1
sess.Values["user"]
является interface{}
, а то, что находится между скобками, называется утверждением типа . Он проверяет, что значение sess.Values["user"]
имеет тип bson.ObjectId
. Если это так, то ok
будет true
. В противном случае это будет false
.
Например:
var i interface{}
i = int(42)
a, ok := i.(int)
// a == 42 and ok == true
b, ok := i.(string)
// b == "" (default value) and ok == false
Ответ 2
Это просто утверждение типа.