2016-04-05 94 views
0

mgo文檔:這個文字的類型是什麼?

pipe := collection.Pipe([]bson.M{{"$match": bson.M{"name": "Otavio"}}}) 

分解這一說法,我看到傳遞給collection.Pipe參數是[]bson.M類型。鑑於切片通過[]sometype{ ... }語法初始化,我得出結論,上述切片恰好包含一個項目(所以len == 1),並且該項目是{"$match": bson.M{"name": "Otavio"}}文字。

這個文字的類型是什麼?直觀地說,我想說這是一個map[string]interface{},但是當我試圖檢查在旅途中操場上,我無法初始化一個類似的數據結構:https://play.golang.org/p/7QKYaQPi6g

我的問題,因此是雙重的:

  1. 是什麼https://play.golang.org/p/7QKYaQPi6g的類型(假設我在我的推理中沒有犯錯)
  2. 我在做什麼錯在x := {"foo": 1, "bar": 1}

回答

2

bson.Mmap[string]interface{}的另一個名稱。請參閱其documentation。它作爲聲明,

type M map[string]interface{} 

所以,是{"$match": bson.M{"name": "Otavio"}bson.M型啊

+2

我沒有想過要檢查的一件事......這不是我最輝煌的問題之一......謝謝! – blz

1
x := {"foo": 1, "bar": 1} 

在這份聲明中沒有機會以小博大的類型。當你做這樣的事情:

[]bson.M{{"$match": bson.M{"name": "Otavio"}}} 

編譯器知道你是初始化特定類型的片,所以沒有必要每次都重複這種類型的(除非它的界面)。這種初始化被稱爲composite literals並被引入go1.0

+0

,但當然!另一方面,由於我假定'{「$ match」:bson.M {「name」:「Otavio」}}'不是'類型',所以我仍然難以理解字面類型, bson.M'。 – blz

+0

['bson.M'](https://godoc.org/labix.org/v2/mgo/bson#M)只是'map [string] interface {}'。所以在你的情況下,它將字符串映射到另一個'bson.M' – janisz