日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Go 透明文件夾的特性,有沒有必要加?

來源: 責編: 時間:2023-11-07 09:13:26 240觀看
導讀大家好,我是煎魚。在 Go 語言中,我們一般會用模塊(Module)和包(Package)來組織我們的項目、庫的目錄和代碼結構。這也是官方所推薦的。今天給大家分享一個面向包這塊的新提案,看看是否合適加進 Go 特性中?看看社區里不同人的

大家好,我是煎魚。MPm28資訊網——每日最新資訊28at.com

在 Go 語言中,我們一般會用模塊(Module)和包(Package)來組織我們的項目、庫的目錄和代碼結構。這也是官方所推薦的。MPm28資訊網——每日最新資訊28at.com

今天給大家分享一個面向包這塊的新提案,看看是否合適加進 Go 特性中?看看社區里不同人的想法。MPm28資訊網——每日最新資訊28at.com

前置知識:模塊和包

具體來講,模塊(Module)就是 go mod 的應用。我們最常接觸到的是以下命令:MPm28資訊網——每日最新資訊28at.com

mkdir my-projectcd my-projectgo mod init github.com/eddycjy/my-project

在執行了 go mod init 后會生成 go.mod 文件,如下所示:MPm28資訊網——每日最新資訊28at.com

// go.modmodule github.com/eddycjy/my-projectgo 1.21.1

這就是這個項目的模塊。MPm28資訊網——每日最新資訊28at.com

對應到包(Package)中,會更加的直接和顯性。我們一般會創建類似如下的目錄結構:MPm28資訊網——每日最新資訊28at.com

<my-project>  -<cli>    --cli.go  -<internals>    --internals.go  --go.mod  --main.go

Go 文件中的 package name,存在明確的約定俗成的標準,需要和目錄名稱保持一致。MPm28資訊網——每日最新資訊28at.com

例如:MPm28資訊網——每日最新資訊28at.com

// internals.gopackage internalsimport "fmt"func Hello() { fmt.Println("你好,煎魚!")}

如果在其他地方中導入該包,則為:MPm28資訊網——每日最新資訊28at.com

import ( ... "github.com/eddycjy/my-project/internals")

以上就是模塊和包的基礎前置知識。我們接下來正式進入提案的正題。MPm28資訊網——每日最新資訊28at.com

提案:透明文件夾

針對 Go 程序的代碼組織結構管理,最近社區有個同學提出了一個新提案:MPm28資訊網——每日最新資訊28at.com

圖片圖片MPm28資訊網——每日最新資訊28at.com

在 Go 里文件夾默認與包(Package)的關系是劃等號的。雖然這很方便,但是提案作者反饋:在某些情況下,我們需要通過文件夾來實現純粹的組織和可讀性目的,而不想引入新的包。MPm28資訊網——每日最新資訊28at.com

為此提出了 “透明文件夾” 的概念,通過使用諸如 Next.js 應用程序路由器中看到的 (folder) 或 _folder 之類的語義來表示。MPm28資訊網——每日最新資訊28at.com

這些文件夾可以在不創建新軟件包的情況下組織軟件包內的文件。它們將與軟件包的根目錄保持關系。MPm28資訊網——每日最新資訊28at.com

例子如下:MPm28資訊網——每日最新資訊28at.com

myapp  main.go  myTypes.go  (routes)     handleRoot.go     handleMultipart.go     ...  db     connect.go     dbTypes.go     (auth)         strategy1.go         strategy2.go         ...

可以看到這個例子,他使用 (folder) 的方式來表示透明文件夾。例如:(routes) 和 (auth),這樣他就不需要再細分不同的 package name,統一用 myapp 和 db 的包名就能進行引用。MPm28資訊網——每日最新資訊28at.com

簡單來講,該提案的實現方式是:通過將工程中 package name 和實體文件夾目錄的作用分割開,目的是:提供一種純粹的代碼組織方式。MPm28資訊網——每日最新資訊28at.com

一些爭議

其實類似的場景訴求,我有一個朋友曾經聽幾個同事吐槽過。但一般會是在比較大的 Go 項目中,例如出現以下場景:MPm28資訊網——每日最新資訊28at.com

myapp  service    a-service    b-service    c-service    ...

會認為這樣 package 切割的比較碎,但是不區分開。多了后在代碼結構上又很容易繁雜化。所以會想有一種純碎的代碼組織方式。MPm28資訊網——每日最新資訊28at.com

爭議也是有不少的。因為他對語言的 ROI 并不是太高,變動的東西(例如:工具、IDE、tests 等)會比較多。MPm28資訊網——每日最新資訊28at.com

只需將文件命名為:aaa-foo.go aaa-bar.go bbb-foo.go bbb-bar.go,而不是 aaa/foo.go aaa/bar.go bbb/foo.go bbb/bar.go。也能達到類似的效果。MPm28資訊網——每日最新資訊28at.com

也有表示添加透明子文件夾會讓一切變得更加復雜,卻沒有任何好處。把文件放在它們應該在的地方就可以了。現在已經在其他語言中看到過這種替代方法,很糟糕。MPm28資訊網——每日最新資訊28at.com

總結

這個提案本身的出發點很常見,因為 package name 和代碼目錄結構綁定了,會導致在設計代碼結構時會有些受限,最終受此引導拆 package 來形成結構化。MPm28資訊網——每日最新資訊28at.com

如果盲目的添加透明文件夾,反而會出現一個尷尬的問題。因為 Go 語言在這塊是非常直接的,添加了這類模式,大家反而會沒法篤定,要去看看項目的代碼結構才能確定。MPm28資訊網——每日最新資訊28at.com

我認為反而會導致可讀性會有所下降。MPm28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-17381-0.htmlGo 透明文件夾的特性,有沒有必要加?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 想快速進入人工智能領域的Java程序員?你準備好了嗎?

下一篇: 這五道JavaScript題,90%的開發者都做不出來

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 武宣县| 呈贡县| 诏安县| 英山县| 子长县| 安塞县| 巴东县| 荥阳市| 和林格尔县| 隆昌县| 慈溪市| 河东区| 米林县| 扎鲁特旗| 鄂托克前旗| 隆昌县| 咸丰县| 尉氏县| 通山县| 社旗县| 菏泽市| 美姑县| 宜宾县| 当雄县| 黎平县| 长岭县| 四子王旗| 乌什县| 金堂县| 珠海市| 霞浦县| 安平县| 西和县| 金川县| 寿光市| 陕西省| 德令哈市| 施秉县| 剑阁县| 潼关县| 出国|