"dot parenthesis"语法的含义是什么?



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

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

谁能给我解释一下这里的语法吗?我知道sess.Values["user"]从会话中获得一个值,但是接下来的部分是什么?为什么表达式在圆括号中的点后面?这是一个函数调用吗?

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

相关内容

  • 没有找到相关文章

最新更新