78

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"]いますが、それに続く部分は何ですか? ドットの後の式が括弧で囲まれているのはなぜですか? これは関数呼び出しですか?

4

1 に答える 1

106

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
于 2014-06-30T14:55:18.737 に答える