我不明白这种语法

时间:2014-06-30 14:47:57

标签: go

我正在研究一个将数据存储在mongodb中的golang应用程序示例。此行(https://github.com/zeebo/gostbook/blob/master/context.go#L36)的代码似乎访问存储在大猩猩会话中的用户ID:

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

请有人向我解释一下这里的语法吗?我理解sess.Values["user"]从会话中获取值,但后面的部分是什么?为什么点后的表达式在括号中?这是函数调用吗?谢谢!

1 个答案:

答案 0 :(得分:47)

sess.Values["user"]interface{},括号之间的内容称为 type assertion 。它会检查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