我寫了一個簡單的go應用程序並將其格式化爲多個包。如何在程序包中共享變量go-lang
+main
+controllers
+handlers
+commons
+utils
我在主包中啓動服務器並在啓動時讀取服務器特定參數。
我不會使用這些參數,例如來自commons包的DB屬性。我不能將主包導入到commons的原因commons是一個依賴於控制器,處理程序這是一個依賴於主。所以這會導致循環導入。
我們該如何處理這種情況呢?是否有可能只讀一次配置,並在需要時在commons包內引用它?例子會很有幫助。
選擇一個不導入其他軟件包的軟件包,這樣所有軟件包都可以導入它。並將共享變量放入其中。而'main'軟件包也可以訪問它來存儲啓動時讀取的參數。 – icza
對於單個應用程序,你可能不應該擁有那麼多獨立的包。這些年來,在社區中一直存在很多關於此的喋喋不休,但是對於一個具有主要軟件包主幹的二進制文件來說,你可能會更好,只是將其他軟件包分離出來,而這些軟件包顯然可以在不同的項目中重複使用。這裏有一些進一步的討論(https://forum.golangbridge.org/t/organizing-go-code/1110/6)。 – AndrewN
假設你遵循AndrewN的建議(KISS),並且現在避免額外的包結構,你可以使用標誌包從命令行讀取參數嗎?這似乎解決了所述的問題。 AFAIK,旗包可以從任何包中調用(不是很可愛?),而不僅僅是主要的,所以如果關鍵是參數在一個共享的包中,而不是主要的,那麼從那裏開始工作。 – gbulmer