1. ホーム
  2. go

ドット括弧」構文の意味を教えてください。[重複しています]。

2023-07-29 03:56:15

質問内容

私は、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