2010-05-21 99 views
5

由於我用C++編程已經很長時間了,但我知道在C++中,類被組織成.h文件和.cpp文件。還有許多其他語言可以將代碼拆分爲目錄結構中的邏輯分組以改善組織。組織Go界面的最佳方式

那麼我現在正在努力學習Go,我在閱讀Go for C++ Programmers文章的時候遇到了接口。文章解釋說,Go中的接口基本上代替了類,並展示瞭如何設置它們。

我想弄清楚的是,我應該如何組織一個接口到文件?例如,如果接口在另一個文件中,而實現在另一個文件中?

myInterface.go

type myInterface interface { 
    get() int 
    set(i int) 
} 


myImplementation.go

type myType struct { i int } 
func (p *myType) set(i int) { p.i = i } 
func (p *myType) get() int { return p.i } 

我在這裏的代碼可能是錯的,因爲我不徹底理解我做的,但(如果我我錯了請糾正我),但這是設置這個最好的方法嗎?我非常難以試圖圍繞如何在Go中組織代碼,所以我非常感謝所有幫助!

Metropolis

+0

我在演出中已經很晚了。但我通常遵循去源代碼樣式:https://golang.org/src – 2017-10-02 17:56:56

回答

5

沒有必要將類型和接口放在單獨的文件中。從每個包裝出口的東西都是重要的,你用大寫字母開頭表示這些東西。在C & co。頭文件中涉及的內容很重要,因爲這是「導入」(包含)的東西。在Go中,它是導入的包,它的內容如何組織成不同的源文件並不重要(無論如何,它對進口商都是不可見的)。

我個人的建議是避免創建不必要的文件。如果代碼相對較短,請將其保存在一個文件中。如果時間很長,那麼考慮拆分它感覺自然的部分(例如,如果您使用Java或C++進行操作,那麼接口+相關函數可能會形成一個單獨的類)。不要爲了將代碼定義與代碼分離而拆分任何東西;即使它在C中也沒有意義。

+0

非常感謝信息Arkku。我問這個問題的原因是因爲我非常擔心Go會變成功能巨星。我不想在頁面上有20個函數,因爲我認爲這很難處理。但另一方面,也許Go會被編程得更像這樣? – Metropolis 2010-05-22 02:02:09

+0

只要內容屬於一起,我認爲源文件的長度不是很重要,在Java中,一個類中的所有內容都在該文件中。如果屬於這個類的東西,這不是一個問題,將它任意分割成一個單獨的文件(如果這在Java中是可能的)將是非常混亂的。 – Arkku 2010-05-22 10:27:15

+0

我想我應該重寫我的問題。你能否給我一些Go文件結構,這樣就可以看到文件如何相互交互?從目前爲止我看到的所有例子都是一個主要功能,以及在相同的文件中調用對方的一些其他功能。這對於例子很好,但是在更有組織的環境中,我認爲這會很糟糕。 – Metropolis 2010-05-22 18:44:56

6

Go編程語言不是C++,也不是C語言。它就像一種新語言。 Go與頭文件不同。它與C++的類概念只有鬆散的聯繫。由於您不是專家級的C++程序員,因此請忽略文章Go For C++ Programmers

首先閱讀A Tutorial for the Go Programming Language。然後閱讀Effective Go。瀏覽The Go Programming Language Specification,所以你會知道在哪裏查找的東西。

Go是開源的,所以看看真正的Go package documentationsource code

首先,看看Go的作者編寫的timedocumentationsource code。他們不使用單獨的文件進行接口聲明和實現,那麼爲什麼你想要?正如你自己所說,你不知道你在做什麼,那麼爲什麼不從專家設定的例子開始呢?

Go編程語言開發的一些動機來自於創建比C更好並且比C++更簡單的語言的渴望。考慮到Go的過程特徵(通常是C),程序設計概念(如耦合和內聚)是有用的。這些概念在將Go time包劃分爲多個源文件時很明顯。一些類設計概念也會有用,但請記住,Go不支持繼承。由於尼克勞斯沃斯在他的經典論文「逐步細化的程序開發」中指出,程序的早期草稿很少是理想的,有時甚至可能是草率的。即使是最終版本也很少完美。例如,Go作者僅在幾個月後就重寫了Go json包。

Go編程語言的設計和實現有助於使用許多小函數。它有利於簡潔的解決方案。當然,許多功能並沒有暴露在軟件包之外。功能大小或數量的任意限制很少適用於任何語言。

Go程序是通過將 鏈接在一起打包而構建的。反過來 甲包從一個或多個源構成 文件,它們一起聲明常量, 類型,變量和函數 屬於封裝體和在相同的 包中的所有文件 訪問。那些元素可能是 導出並在另一個包中使用。 Packages, The Go Programming Language Specification.

你希望你的第一個Go包做什麼?詢問可以回答的具體問題,並提供詳細信息。

+0

我沒有說它是C++或C .....我知道它沒有一個等同於頭文件,我也知道它是與C++概念的鬆散關聯......我的問題是,「在Go中組織接口/代碼的最佳方式是什麼」 – Metropolis 2010-05-21 23:34:06

+0

我只是簡單地使用C++頭文件來比較它,因爲這篇文章是關於比較的。 – Metropolis 2010-05-21 23:40:06

+0

感謝您的額外信息,彼得,幫助。我想我只需要找到一些方法從我的對象(類)導向的心態走向不同的東西,我很擔心它會出現sl。。我恨寫作草率的代碼....因爲我確定我們很多人做... – Metropolis 2010-05-22 02:20:11