AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Go 透明文件夾的特性,有沒(méi)有必要加?

來(lái)源: 責(zé)編: 時(shí)間:2023-11-07 09:13:26 264觀看
導(dǎo)讀大家好,我是煎魚(yú)。在 Go 語(yǔ)言中,我們一般會(huì)用模塊(Module)和包(Package)來(lái)組織我們的項(xiàng)目、庫(kù)的目錄和代碼結(jié)構(gòu)。這也是官方所推薦的。今天給大家分享一個(gè)面向包這塊的新提案,看看是否合適加進(jìn) Go 特性中?看看社區(qū)里不同人的

大家好,我是煎魚(yú)。IVG28資訊網(wǎng)——每日最新資訊28at.com

在 Go 語(yǔ)言中,我們一般會(huì)用模塊(Module)和包(Package)來(lái)組織我們的項(xiàng)目、庫(kù)的目錄和代碼結(jié)構(gòu)。這也是官方所推薦的。IVG28資訊網(wǎng)——每日最新資訊28at.com

今天給大家分享一個(gè)面向包這塊的新提案,看看是否合適加進(jìn) Go 特性中?看看社區(qū)里不同人的想法。IVG28資訊網(wǎng)——每日最新資訊28at.com

前置知識(shí):模塊和包

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

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

在執(zhí)行了 go mod init 后會(huì)生成 go.mod 文件,如下所示:IVG28資訊網(wǎng)——每日最新資訊28at.com

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

這就是這個(gè)項(xiàng)目的模塊。IVG28資訊網(wǎng)——每日最新資訊28at.com

對(duì)應(yīng)到包(Package)中,會(huì)更加的直接和顯性。我們一般會(huì)創(chuàng)建類(lèi)似如下的目錄結(jié)構(gòu):IVG28資訊網(wǎng)——每日最新資訊28at.com

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

Go 文件中的 package name,存在明確的約定俗成的標(biāo)準(zhǔn),需要和目錄名稱(chēng)保持一致。IVG28資訊網(wǎng)——每日最新資訊28at.com

例如:IVG28資訊網(wǎng)——每日最新資訊28at.com

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

如果在其他地方中導(dǎo)入該包,則為:IVG28資訊網(wǎng)——每日最新資訊28at.com

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

以上就是模塊和包的基礎(chǔ)前置知識(shí)。我們接下來(lái)正式進(jìn)入提案的正題。IVG28資訊網(wǎng)——每日最新資訊28at.com

提案:透明文件夾

針對(duì) Go 程序的代碼組織結(jié)構(gòu)管理,最近社區(qū)有個(gè)同學(xué)提出了一個(gè)新提案:IVG28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片IVG28資訊網(wǎng)——每日最新資訊28at.com

在 Go 里文件夾默認(rèn)與包(Package)的關(guān)系是劃等號(hào)的。雖然這很方便,但是提案作者反饋:在某些情況下,我們需要通過(guò)文件夾來(lái)實(shí)現(xiàn)純粹的組織和可讀性目的,而不想引入新的包。IVG28資訊網(wǎng)——每日最新資訊28at.com

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

這些文件夾可以在不創(chuàng)建新軟件包的情況下組織軟件包內(nèi)的文件。它們將與軟件包的根目錄保持關(guān)系。IVG28資訊網(wǎng)——每日最新資訊28at.com

例子如下:IVG28資訊網(wǎng)——每日最新資訊28at.com

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

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

簡(jiǎn)單來(lái)講,該提案的實(shí)現(xiàn)方式是:通過(guò)將工程中 package name 和實(shí)體文件夾目錄的作用分割開(kāi),目的是:提供一種純粹的代碼組織方式。IVG28資訊網(wǎng)——每日最新資訊28at.com

一些爭(zhēng)議

其實(shí)類(lèi)似的場(chǎng)景訴求,我有一個(gè)朋友曾經(jīng)聽(tīng)?zhēng)讉€(gè)同事吐槽過(guò)。但一般會(huì)是在比較大的 Go 項(xiàng)目中,例如出現(xiàn)以下場(chǎng)景:IVG28資訊網(wǎng)——每日最新資訊28at.com

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

會(huì)認(rèn)為這樣 package 切割的比較碎,但是不區(qū)分開(kāi)。多了后在代碼結(jié)構(gòu)上又很容易繁雜化。所以會(huì)想有一種純碎的代碼組織方式。IVG28資訊網(wǎng)——每日最新資訊28at.com

爭(zhēng)議也是有不少的。因?yàn)樗麑?duì)語(yǔ)言的 ROI 并不是太高,變動(dòng)的東西(例如:工具、IDE、tests 等)會(huì)比較多。IVG28資訊網(wǎng)——每日最新資訊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。也能達(dá)到類(lèi)似的效果。IVG28資訊網(wǎng)——每日最新資訊28at.com

也有表示添加透明子文件夾會(huì)讓一切變得更加復(fù)雜,卻沒(méi)有任何好處。把文件放在它們應(yīng)該在的地方就可以了。現(xiàn)在已經(jīng)在其他語(yǔ)言中看到過(guò)這種替代方法,很糟糕。IVG28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

這個(gè)提案本身的出發(fā)點(diǎn)很常見(jiàn),因?yàn)?package name 和代碼目錄結(jié)構(gòu)綁定了,會(huì)導(dǎo)致在設(shè)計(jì)代碼結(jié)構(gòu)時(shí)會(huì)有些受限,最終受此引導(dǎo)拆 package 來(lái)形成結(jié)構(gòu)化。IVG28資訊網(wǎng)——每日最新資訊28at.com

如果盲目的添加透明文件夾,反而會(huì)出現(xiàn)一個(gè)尷尬的問(wèn)題。因?yàn)?Go 語(yǔ)言在這塊是非常直接的,添加了這類(lèi)模式,大家反而會(huì)沒(méi)法篤定,要去看看項(xiàng)目的代碼結(jié)構(gòu)才能確定。IVG28資訊網(wǎng)——每日最新資訊28at.com

我認(rèn)為反而會(huì)導(dǎo)致可讀性會(huì)有所下降。IVG28資訊網(wǎng)——每日最新資訊28at.com

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

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 想快速進(jìn)入人工智能領(lǐng)域的Java程序員?你準(zhǔn)備好了嗎?

下一篇: 這五道JavaScript題,90%的開(kāi)發(fā)者都做不出來(lái)

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top