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"]
はセッションから値を取得しますが、その後の部分は何ですか?かっこ内のドットの後の式はなぜですか?これは関数呼び出しですか?
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