Подтвердить что ты не робот

Что означает синтаксис "точка скобок" в Голанге?

Я изучаю пример приложения Go, которое хранит данные в mongodb. Код в этой строке (https://github.com/zeebo/gostbook/blob/master/context.go#L36), по-видимому, обращается к идентификатору пользователя, хранящемуся в сеансе гориллы:

if uid, ok := sess.Values["user"].(bson.ObjectId); ok {
  ...
}

Кто-нибудь, пожалуйста, объясните мне синтаксис здесь? Я понимаю, что sess.Values["user"] получает значение из сеанса, но какая часть следует за этим? Почему выражение после точки в скобках? Это вызов функции?

4b9b3361

Ответ 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