亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 包和文件夾中構建代碼?

如何在 Go 包和文件夾中構建代碼?

Go
鴻蒙傳說 2021-12-20 11:01:53
我已經閱讀了涵蓋這個問題的各種文章,并且有很多不同的方法。我是 Go 的新手,我正在努力學習最佳實踐,而不是一開始就選擇一些不好的風格。來自有課程的語言,我在學習 Go 等新語言時盡量不應用我多年來學到的一切。這提出了我的第一點:在 Go 中使用包和文件夾來組織你的程序是否被認為是一種好風格?從我到目前為止所讀到的內容來看,有些人建議這樣做,所以我選擇了這樣的結構(我的實際程序要大得多,因此符合“將代碼移動到包”的方法):.├── bin│   └── helloworld└── src    ├── github.com    │   ├── SOMEUSER    │   │   └── helloworld    │   │       ├── main.go    │   │       ├── main_test.go    │   │       ├── greeter    │   │       │   └── talker.go    │   │       └── person.go因此,如您所見,我將一些新代碼移到了一個單獨的包中,在這種情況下將是greeter. 我在我的 main.go 文件中導入了這個包(我已經多次閱讀,建議使用這種方法而不是像 那樣進行導入import ./greeter):package mainimport "github.com/SOMEUSER/helloworld/greeter"func main() {    greeter.Hello()}然后調用Hello()我的greeter包中的函數。到現在為止還挺好。但是我的實際問題來了(假設上述結構是在 Go 中構建代碼的推薦方式):我現在如何使用在我的main包中的任何文件中聲明的任何函數、結構等(在這里我有一些嚴重的懷疑,這是否是要走的路,沒有雙關語)?所以讓我們假設我在person.go調用中聲明了一些結構Person。這個結構現在在我的應用程序的幾個部分使用,最好也在我包含的(本地)包中使用它,如下所示:package greeterimport "fmt"func Hello() {    p := Person{Name: "Steve"}    fmt.Println(p.Name)}嘗試構建它時,它會引發undefined: Person錯誤。如果您能指出我正確的方向,并就 Go 中推薦的方法和風格啟發我,我將非常感激。
查看完整描述

2 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

要使用Person結構體,您需要導入github.com/SOMEUSER/helloworld包并像main.Person. 但是,這是不可能的,因為您無法導入main包并且會創建循環依賴。

通常,我將以下代碼導出到子包中:

  • 與包完全無關的助手

  • 獨立的部分,可能是第三方庫

  • 相關但不依賴main代碼的部分

現在,請記住,這確實是一個復雜性問題。擁有許多文件但低復雜性并不能證明子包的合理性。


查看完整回答
反對 回復 2021-12-20
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

這里有兩個“解決方案”。

1) 將代碼放回主包中,直到您知道如何處理它為止(這是我的建議)

2) 創建一個定義 Person 類型的 person 包并將該包導入到兩者中。我認為 person.Person 很傻,這就是為什么我不會這樣做。database.Person 或 server.Person 對我來說更有意義。我的意思是在這一點上,這一切都歸結為你如何閱讀、寫作和存儲 Person,這還不清楚。


查看完整回答
反對 回復 2021-12-20
  • 2 回答
  • 0 關注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號