最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go 面向包新提案透明文件夾必要性分析

 更新時間:2023年11月08日 09:41:40   作者:煎魚  
這篇文章主要為大家介紹了Go 面向包新提案,透明文件夾必要性分析,看看是否合適加進 Go 特性中,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

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

今天給大家分享一個面向包這塊的新提案,看看是否合適加進 Go 特性中?

前置知識:模塊和包

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

mkdir my-project
cd my-project
go mod init github.com/eddycjjy/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)建新軟件包的情況下組織軟件包內的文件。它們將與軟件包的根目錄保持鏈接。

例子如下:

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 和實體文件夾目錄的作用分割開,目的是:提供一種純粹的代碼組織方式。

一些爭議

其實類似的場景訴求,我有一個朋友曾經聽幾個同事吐槽過。但一般會是在比較大的 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。也能達到類似的效果。

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

總結

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

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

以上就是Go 面向包新提案透明文件夾必要性分析的詳細內容,更多關于Go 透明文件夾的資料請關注腳本之家其它相關文章!

相關文章

  • golang結構體slice排序方式

    golang結構體slice排序方式

    go語言的slice()不僅可以對int類型的數組進行排序,還可以對struct類型的數組進行排序,排序函數包括Slice()、SliceStable()和SliceIsSorted(),結構體可以定義為更復雜的類型
    2025-12-12
  • Go搭建高效的Gin Web目錄結構

    Go搭建高效的Gin Web目錄結構

    本文主要介紹了Go搭建高效的Gin Web目錄結構,構建一個既高效又便于管理的項目架構,助力開發(fā)者打造既快速響應又易于維護的Web應用程序,感興趣的可以了解一下
    2025-08-08
  • golang通過gorm操作sqlite設置主鍵自增的步驟

    golang通過gorm操作sqlite設置主鍵自增的步驟

    這篇文章主要介紹了golang通過gorm操作sqlite設置主鍵自增的詳細步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Go語言使用字符串的幾個技巧分享

    Go語言使用字符串的幾個技巧分享

    這篇文章中小編將給出一些Go語言在處理字符串方面的技巧,對大家學習Go語言具有一定的參考借鑒價值,下面一起看看吧。
    2016-09-09
  • Golang交叉編譯(跨平臺編譯)的使用

    Golang交叉編譯(跨平臺編譯)的使用

    本文主要介紹了Golang交叉編譯(跨平臺編譯)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • golang結構化日志log/slog包之slog.Record的用法簡介

    golang結構化日志log/slog包之slog.Record的用法簡介

    這篇文章主要為大家詳細介紹了golang結構化日志log/slog包中slog.Record結構體的使用方法和需要注意的點,文中的示例代碼講解詳細,需要的可以學習一下
    2023-10-10
  • 簡單聊聊Go語言中空結構體和空字符串的特殊之處

    簡單聊聊Go語言中空結構體和空字符串的特殊之處

    在日常的編程過程中,大家應該經常能遇到各種”空“吧,比如空指針、空結構體、空字符串等,本文就以?Go?語言為例,一起來看看空結構體和空字符串在?Go?語言中的特殊之處吧
    2024-03-03
  • golang中有序Map的實現(xiàn)

    golang中有序Map的實現(xiàn)

    Go語言中XContainerOrderedMap庫,解決標準map無序問題,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2025-06-06
  • golang實現(xiàn)分頁算法實例代碼

    golang實現(xiàn)分頁算法實例代碼

    這篇文章主要給大家介紹了關于golang實現(xiàn)分頁算法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • 基于Go語言輕松構建定時任務調度器的示例代碼

    基于Go語言輕松構建定時任務調度器的示例代碼

    Go 標準庫?time?包提供了非常強大且簡潔的支持,配合協(xié)程可輕松構建定時任務調度器,下面就跟隨小編一起來了解下如何使用Go語言實現(xiàn)任務調度器可以定時執(zhí)行任務吧
    2025-08-08

最新評論

平泉县| 抚顺县| 华蓥市| 商洛市| 恩施市| 肃南| 铅山县| 阳朔县| 吐鲁番市| 焦作市| 桂东县| 清涧县| 和平区| 客服| 诸城市| 临湘市| 宜宾县| 丹寨县| 望谟县| 奉节县| 昌都县| 准格尔旗| 界首市| 温宿县| 利津县| 桃园县| 永兴县| 霸州市| 雷州市| 泰宁县| 高陵县| 高淳县| 南澳县| 额济纳旗| 石楼县| 泌阳县| 隆化县| 兴国县| 如皋市| 若尔盖县| 定兴县|