2015-10-12 67 views
0

我正在學習使用PHP是我的最佳選擇(我的池是一個小孩池:HTML,CSS,PHP,JavaScript,SQL)。我從來沒有真正進入像C,C++這樣的大恐慌,我認爲Go會是一個公平的開始。PHP去。我應該如何構建我的項目?

比方說,我有以下結構:

|App 
|server.go 
----|Controllers 
-------|main.go 

在PHP中包括一個文件,意味着你有機會獲得的東西父文件,並已經包括了所有以前的文件(取決於兩件事情,但大部分)。

在走,如果我有這樣的server.go

package main 

import (
    "REST/Controllers" 
    "fmt" 
) 

type test struct { 
    Number int 
} 

var TestVar = test{} 

func main() { 
    controllers.Log() 
} 

是否有可能訪問的testvar在我的控制器/ main.go?我試過,但我似乎無法找到如何。下面的代碼拋出一個不確定的VAR誤差:

main.go

package controllers 

import (
    "fmt" 
) 

func Log() { 
    fmt.Printf("%q", TestVar) 
} 

我唯一的其他想法是它向下傳遞通過一個功能,但是如果我想真正改變的testvar的值是什麼?我對這個語言並沒有太多的瞭解,所以我不太瞭解指針和所有這些。如果我有10個變量,每次都不會將10個變量傳遞給一個函數變得太麻煩了?

記得我來自PHP,所以幾乎所有的髒東西都是爲我塗糖衣。

感謝您的幫助。

+4

你不能這樣做,否則你將在這兩個軟件包之間產生循環依賴。您應該在開始使用前閱讀GO文檔:https://golang.org/doc/effective_go.html(您也可以按照瀏覽https://tour.golang.org/welcome/1) – Alessio

+0

不要嘗試Go中過度工程的代碼組織。您在網上遇到的許多項目都有一個非常扁平的結構。我建議你在一個包中開始工作(主要),並最終將代碼移動到其他包,如果它代表獨立的功能。 – SirDarius

+0

啊好的。這對我來說是一個巨大的變化。在PHP中,您通常希望將所有內容分割成不同的文件和文件夾。這將是一個艱難的改變(將(幾乎)所有內容放在同一個文件夾中)。 – Irv

回答

0

擴展@SirDarius所說的不要過度組織您的代碼結構。

Go項目習慣使用一個包含源代碼的目錄。每個文件就像一個模塊,可以在線條上很長。每個目錄都是一個項目,也是子目錄!他們是子項目。

之後的想法,是控制器一個子項目?不,它是實際項目的一部分。所以把它放在父目錄中。如果你有一些代碼可以在這個包之外使用,你可以製作一個新的包或者一個子包(最合適)。

一般來說,簡化!不要創建目錄來組織類似的功能,而是將它們放入一個文件中。

在你的情況下,在根目錄下有main.golog.go。除非要創建通用日誌記錄程序包,否則請創建一個名爲log的目錄,其中包含main.go。但是這將是一個獨立的包,所以它不需要從另一個或父包中獲取變量。如果您似乎無論如何都需要該變量,請將其作爲配置傳遞。

+0

除非您需要一切可以訪問所有內容,否則您應該將項目組織爲具有明確職責和簡單的公開(導出)API的包。用模糊的術語來說,過度工程是不好的,但是在任何非平凡複雜的項目中,您應該清楚地瞭解組件或包或模塊之間的邊界和依賴關係,Golang在某種程度上不是例外。 –

+0

當然,但是'Log'不一定是進入新包的東西。特別是webapp的控制器應該放在根目錄下。控制器當然不是獨立的軟件包。 –

相關問題