web-dev-qa-db-ja.com

Golangの「ドット括弧」構文の意味は何ですか?

Mongodbにデータを保存するサンプルのGoアプリケーションを勉強しています。この行のコード( https://github.com/zeebo/gostbook/blob/master/context.go#L36 )は、ゴリラセッションに格納されているユーザーIDにアクセスするようです。

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

誰かがここで構文を説明してくれませんか?という事は承知しています sess.Values["user"]はセッションから値を取得しますが、その後の部分は何ですか?かっこ内のドットの後の式はなぜですか?これは関数呼び出しですか?

37
akonsu

sess.Values["user"]interface{}であり、括弧の間にあるものはtype assertionと呼ばれます。 sess.Values["user"]の値がbson.ObjectId型であることを確認します。その場合、oktrueになります。それ以外の場合は、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
64
julienc