成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 前端
如果盲目的添加透明文件夾,反而會出現(xiàn)一個尷尬的問題。因為 Go 語言在這塊是非常直接的,添加了這類模式,大家反而會沒法篤定,要去看看項目的代碼結構才能確定。

大家好,我是煎魚。

在 Go 語言中,我們一般會用模塊(Module)和包(Package)來組織我們的項目、庫的目錄和代碼結構。這也是官方所推薦的。

今天給大家分享一個面向包這塊的新提案,看看是否合適加進 Go 特性中?看看社區(qū)里不同人的想法。

前置知識:模塊和包

具體來講,模塊(Module)就是 go mod 的應用。我們最常接觸到的是以下命令:

mkdir my-project
cd my-project
go mod init github.com/eddycjy/my-project

在執(zhí)行了 go mod init 后會生成 go.mod 文件,如下所示:

// go.mod
module github.com/eddycjy/my-project

go 1.21.1

這就是這個項目的模塊。

對應到包(Package)中,會更加的直接和顯性。我們一般會創(chuàng)建類似如下的目錄結構:

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

Go 文件中的 package name,存在明確的約定俗成的標準,需要和目錄名稱保持一致。

例如:

// internals.go
package internals

import "fmt"

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

如果在其他地方中導入該包,則為:

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

以上就是模塊和包的基礎前置知識。我們接下來正式進入提案的正題。

提案:透明文件夾

針對 Go 程序的代碼組織結構管理,最近社區(qū)有個同學提出了一個新提案:

圖片圖片

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

為此提出了 “透明文件夾” 的概念,通過使用諸如 Next.js 應用程序路由器中看到的 (folder) 或 _folder 之類的語義來表示。

這些文件夾可以在不創(chuàng)建新軟件包的情況下組織軟件包內(nèi)的文件。它們將與軟件包的根目錄保持關系。

例子如下:

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,統(tǒng)一用 myapp 和 db 的包名就能進行引用。

簡單來講,該提案的實現(xiàn)方式是:通過將工程中 package name 和實體文件夾目錄的作用分割開,目的是:提供一種純粹的代碼組織方式。

一些爭議

其實類似的場景訴求,我有一個朋友曾經(jīng)聽幾個同事吐槽過。但一般會是在比較大的 Go 項目中,例如出現(xiàn)以下場景:

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

會認為這樣 package 切割的比較碎,但是不區(qū)分開。多了后在代碼結構上又很容易繁雜化。所以會想有一種純碎的代碼組織方式。

爭議也是有不少的。因為他對語言的 ROI 并不是太高,變動的東西(例如:工具、IDE、tests 等)會比較多。

只需將文件命名為:aaa-foo.go aaa-bar.go bbb-foo.go bbb-bar.go,而不是 aaa/foo.go aaa/bar.go bbb/foo.go bbb/bar.go。也能達到類似的效果。

也有表示添加透明子文件夾會讓一切變得更加復雜,卻沒有任何好處。把文件放在它們應該在的地方就可以了。現(xiàn)在已經(jīng)在其他語言中看到過這種替代方法,很糟糕。

總結

這個提案本身的出發(fā)點很常見,因為 package name 和代碼目錄結構綁定了,會導致在設計代碼結構時會有些受限,最終受此引導拆 package 來形成結構化。

如果盲目的添加透明文件夾,反而會出現(xiàn)一個尷尬的問題。因為 Go 語言在這塊是非常直接的,添加了這類模式,大家反而會沒法篤定,要去看看項目的代碼結構才能確定。

我認為反而會導致可讀性會有所下降。

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2024-03-20 08:12:12

分庫分表數(shù)據(jù)

2018-04-14 08:19:43

攜號轉(zhuǎn)網(wǎng)運營商網(wǎng)絡

2023-10-30 09:02:13

前端Rust

2014-02-19 10:01:13

GMSAOSP

2021-09-08 22:25:49

手機內(nèi)存技術

2009-12-03 10:18:32

Linux文件夾執(zhí)行權限

2011-08-04 15:36:32

文件夾病毒

2020-09-23 08:53:48

父文件夾模塊Python

2023-07-04 12:55:39

模型指南IFT

2010-12-31 13:35:25

文件夾重定向

2019-11-20 08:20:00

系統(tǒng)更新手機體驗

2010-02-03 15:54:58

Linux SVN安裝

2022-11-16 16:28:21

2024-12-06 15:11:34

Python文件夾目錄

2011-03-04 16:37:13

FileZilla

2009-08-12 16:57:28

C#讀取文件夾

2023-03-28 15:19:37

文件列表scandir函數(shù)

2012-12-25 10:41:27

文件夾加密

2009-08-25 09:47:01

Windows 7自定義個人文件夾

2009-12-11 14:57:02

Linux文件夾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级黄视频 | 国产精品久久国产精品 | 国产一区二区在线观看视频 | 国产精品免费一区二区三区四区 | 欧美精品一区二区三区在线 | 亚洲毛片在线 | 看a网站| 性色视频在线观看 | 自拍偷拍3p | 黄色国产| 正在播放国产精品 | 国产美女免费视频 | 在线视频一区二区 | 国产精品一区二区三区四区五区 | 国产欧美精品一区二区 | 看a网站| 97国产精品视频人人做人人爱 | 欧美高清性xxxxhdvideosex | 精品日韩一区二区三区av动图 | 国产男人的天堂 | 91精品国产综合久久久动漫日韩 | 久久新视频 | 国产视频福利一区 | 国产高清视频在线播放 | 久久久视| 91亚洲国产成人久久精品网站 | 午夜在线免费观看视频 | 欧美极品少妇xxxxⅹ免费视频 | 国产99久久久国产精品 | 亚洲精品在线免费观看视频 | 日韩精品一 | 欧洲尺码日本国产精品 | 视频在线亚洲 | 国产69久久精品成人看动漫 | 欧美性视频在线播放 | 中文字幕一二三区 | 国产一区二区三区四区在线观看 | 黄色亚洲网站 | 中文字幕在线免费观看 | 国产69精品久久99不卡免费版 | 99小视频 |