2016-02-11 47 views
2

我一直在使用由fsouza創建的偉大的go-dockerclient],但我很困惑爲什麼docker.CreateContainerOptions.Volumes是一個字符串映射到結構?爲什麼CreateContainerOptions的卷需要一個map [string] struct {}?

The docs don't explain爲什麼這是,但我想你只需要map [string] =>字符串來映射主機捲到容器卷?或者將值保留爲空,以表示主機卷將安裝在容器內的相同路徑上。

我看了一大堆人of open code on Github與創建容器的人,但我只看到了許多人只用一個字符串和一個空的結構作爲值裝入卷的例子。

我也是新手,所以我可能會錯過一些完全明顯的東西。

+0

一組字符串的另一個習慣變體是'map [string] bool',它佔用**更多RAM,但有點更自然。 – Volker

回答

6

空結構是go中佔據內存0(零)字節的唯一類型。

這是一個常見的成語,當你想存儲東西或信號東西用一個空結構。但東西應該儘可能小。

在你的情況

map[string]struct{} 

用於存儲只是地圖的鑰匙,沒有關聯的值。 這種方式可以快速檢查地圖是否包含密鑰。 (它基本上是一套)。

Here是你可以用空結構做什麼的幾個例子。

+1

謝謝你的回答。儘管從技術上講,這可以達到100%的意義,但我認爲,像這樣一個常見的數據結構就是這樣表示的,這是非常不幸的。 – dalanmiller

+1

@dalanmiller我同意。但你必須與你得到的東西一起工作,因爲go沒有內建類型。 – fl0cke

2

我不確切知道這個軟件包是如何工作的,但map[string]struct{}是表達一個集合的Golang慣用方法。所以我猜測地圖的關鍵字必須包含音量的完整路徑...

相關問題