我算是以 C 語言出道的程式設計師,故很多時候我都只考慮到函數面向,坦白說光能夠適當的把函數拆分到不同的程式檔案中,這個程式已經有六成的可調整性,再來如果能夠把一些 Header 檔案的 include 相依性考慮清楚,我想九成的需求調整都不是什麼問題。
平常我在寫 Node.js 或是 Python 也是如此,Python 我不清楚,但 Node.js 是允許可以循環參照的,故只要不濫用全域變數(最多只用全域常數),大多時候應該是沒有什麼問題。
Go 本身不允許循環參照,我覺得這是一件好事,就像 Go 強制你要檢查 err != nil,藉由一些限制及規範,強迫使用者在寫程式前就先考慮清楚,其實也是方便你未來擴充程式。
以我的專案來說,我至少需要開發兩支獨立的執行檔,且這兩支用到的第三方模組都是一樣的,故當我在開發第一支執行檔時,我就打定主意使用多 package 的方式開發,這樣某些自己的 package 也可以給第二支執行檔使用。
雖然看了四、五本以上的 Go 書籍,但都已經是三年前的事,故我的程式架構在開發時覺得是順理成章的事,後來卻變成一個又一個的疑問,尤其現在開始開發第二支執行檔時特別明顯!
比如說,一個程式中有好多個 package,每個 package 都用了 package A,如果 package A 又有使用 init function,到底 init 會被執行幾次?雖然從結果來看只會執行一次,但我還是想要有個標準答案。
幸好 Go 本身就有提供 Spec 文件,不用像 C 一樣還要花錢買。於是很快的就在 Spec 中找到解答。
能夠每天在程式語言的道路上學習到新東西,那真的是一件快樂的事。
沒有留言:
張貼留言