2017-03-09 34 views
2

我已閱讀Go Tour和谷歌搜索「golang包」,但我還沒有發現任何關於Go的最佳實踐的建議,以便組織中等大小的應用程序。組織Go程序 - 軟件包或其他東西?

如果我有一個應用程序在概念上有幾個不同的部分,也許10^3-10^4 LOC,並且我不打算創建可用於其他應用程序的可重用的庫,應該所有的源代碼文件是package main


爲了澄清...

例如,可以說我的程序將具有以下主要塊:管理一堆永久存儲數據的

  • 東西
    • 允許通常的創建,讀取,更新,刪除操作
  • 東西,其允許人以查看所存儲的數據
  • 東西座標/這些
  • 東西定期使用SOAP從web服務獲取數據更新之間介導。

因此,這將是MVC加上數據的提取器。

從人們做什麼環顧四周,我現在懷疑我應該

  • 在創建$GOPATH/src/myprogramname
  • 沒有把一些main.gopackage main和它func main() { ... }
  • 創建一些子目錄像
    • $GOPATH/src/myprogramname/model
    • $GOPATH/src/myprogramname/view
    • $GOPATH/src/myprogramname/control
    • $GOPATH/src/myprogramname/fetch
  • 在這些子目錄中的文件。去開始package fetch等凡包名總是匹配子目錄名稱。
  • main.go大概會import (... "fetch"; "model"; "view"; "control")
  • main.go生長,它分成按用途命名的其他合理規模。去文件。
  • 建設方案,包括由*

    cd $GOPATH/src/myprogramname 
    go build 
    

在上面的包。去子目錄是所有我需要做什麼?那是組織事物的恰當慣用Go方式嗎?有更多我應該知道或想到的嗎?是否有一些規範的網頁或PDF我忽略了,應該閱讀來找出這個東西?

總之,我不想要10,000行main.go中的所有內容。根據衆所周知的結構化編程和/或OO原則,將代碼組織到文件,子目錄,包和任何其他與正常概念劃分相對應的組織單元中的慣用Go原則是什麼?

回答

1

您可以根據函數的封裝級別將您的項目劃分爲幾個層次,即在主包中具有獨立包和邏輯函數中的低級函數。 (你可以激發你自己的MVC架構) 由於我們沒有關於你的代碼的任何細節,很難看出什麼樣的架構最適合。

但最終您的選擇將基於代碼簡單/可重用性平衡。

+0

這是很好的一般建議,但我正在尋找更具體的,我會更新我的問題來澄清。 – RedGrittyBrick

+0

如果沒有詳細信息,我不能做更多的事情,我會檢查您的更新並向我的回答添加建議:) – Chryor

0

Go中的一般「最佳實踐」似乎是讓每個包都提供一種類型或服務。標準庫中的大多數軟件包都會顯示一種或兩種類型,以及用於處理這些類型的函數。一些像net/http和testing一樣,提供了一種服務 - 而不是「微服務」意義上的可執行文件本身,而是一組與特定活動相關的功能。