本文目錄一覽:
- 1、嘗試用golang 1.18泛型實現orm
- 2、Go 1.18 新特性多模塊工作區教程
- 3、GO語言(十一):開始使用多模塊工作區
- 4、一起使用GO(golang) 來做一個後台管理系統系列10 使用mod 來管理包
嘗試用golang 1.18泛型實現orm
這幾天golang社區對泛型的討論非常多的,一片熱火朝天的景象。對我們廣大gopher來說總歸是好事。
泛型很有可能會顛覆我們之前的很多設計,帶著這種疑問和衝動,我準備嘗試用golang泛型實現幾個orm的常見功能。
本文並沒完全實現通用的orm,只是探討其實現的一種方式提供各位讀者做借鑒。
雖然golang有了泛型,但是目前在標準庫sql底層還沒有改造,目前還有很多地方需要用到reflect。
調用方式
這個部分跟傳統的orm使用上沒有太大區別,沒辦法不使用反射的情況下,泛型的方式可能變得有點繁瑣。
調用方式
和創建table類似,寫入數據好像比沒有之前的orm有優勢。
讀取數據是非常高頻的操作,所以我們稍作封裝。
調用方式
稍微比原先的orm方式有了多一點想像空間,比如 在[T any]做更明確的約束,比如要求實現Filter定製方法。
鑒於本人能力還認證有限,目前還沒有發現泛型對orm劇烈的改進和突破的可能。未來如果go對底層sql做出改動,或者實現諸如Rust那種Enum方式,可能會帶來更多的驚喜。
Go 1.18 新特性多模塊工作區教程
• 隨著 2022 年 3 月 15 日 go 1.18 正式發布,新版本除了對性能的提升之外,還引入了很多新功能,其中就有 go 期盼已久的功能泛型(Generics),同時還引入的多模塊工作區(Workspaces)和模糊測試(Fuzzing)。
• 關於泛型網上已經有很多介紹的教程了,這裡我介紹一個實用的功能,多模塊工作區的使用方法和教程。
• Go 多模塊工作區能夠使開發者能夠更容易地同時處理多個模塊的工作,如:
• 多模塊工作區
• 開發流程演示
• 總結
• 參考文獻
• go 使用的是多模塊工作區,可以讓開發者更容易同時處理多個模塊的開發。在 Go 1.17 之前,只能使用 go.mod replace 指令來實現,如果你正巧是同時進行多個模塊的開發,使用它可能是很痛苦的。每次當你想要提交代碼的時候,都不得不刪除掉 go.mod 中的 replace 才能使模塊穩定的發布版本。 •在使用 go 1.18 多模塊工作區功能的時候,就使用這項工作變得簡單容易處理。下面我來介紹怎麼使用這一功能。• Go 多模塊工作區文檔、代碼示例[5]
• 首先 我們需要 go 1.18 或更高版本 go 安裝[6]
• 通常情況下,建議不要提交 go.work 文件到 git 上,因為它主要用於本地代碼開發。
• 推薦在: $GOPATH 路徑下執行,生成 go.work 文件
• go work init 初始化工作區文件,用於生成 go.work 工作區文件
• go work use 添加新的模塊到工作區
• go work edit 用於編輯 go.work 文件
• go work sync 將工作區的構建列表同步到工作區的模塊
• go env GOWORK
• 文件結構和 go.mod 文件結構類似,支持 Go 版本號、指定工作區和需要替換的倉庫 •文件結構示例:
• 可以使用 go work use hello 添加模塊,也可以手動修改 go.work 工作區添加新的模塊 •在工作區中添加了模塊路徑,編譯的時候會自動使用 use 中的本地代碼進行代碼編譯,和 replaces 功能類似。
• replaces 命令與 go.mod 指令相同,用於替換項目中依賴的倉庫地址 •需要注意的是 replaces 和 use 不能同時指定相同的本地路徑
• 錯誤示例
• 在同時使用 go.work 和 go.mod replace 功能的的時候分別指定不同的代碼倉庫路徑, go.work 優先順序高於 go.mod 中定義
• 在代碼構建時候使用的是 go.work 指定的 example1 倉庫的代碼, go.work 優先順序別更高
• 在 Go 1.18 go run 和 go build 都會默認使用工作區功能 • GOWORK 也可以指定配置 go.work 文件位置
• Go 全局變數 GOWORK 設置 off 則可以禁用工作區功能
• 演示如何使用多模塊工作區功能。在現在微服務盛行的年代,一個人會維護多個代碼倉庫,很多的時候是多個倉庫進行同時開發
• 假設我們現在進行 hello 倉庫開發,實現的功能是,實現將輸入的字元串反轉並輸出,字元串反轉功能依賴於 github.com/link1st/example (下文統稱 example )公共倉庫實現
• 新建 hello 項目
• main.go 代碼
• 運行代碼 go run main.go -str “hello world” 或 go run github.com/link1st/link1st/workspaces/hello -str “hello world” 可以看到輸出了 hello world 反轉以後的字元串
• 到這裡,最初的功能已經完成,但是後續需求變動,不僅需要輸出反轉以後的字元串,還需要將字元串大寫
• 我們則需要去 example 倉庫中添加開發 將字元串大寫的功能
• vim example/stringutil/to_upper.go 代碼如下
• 由於代碼還在本地調試,未提交 git 倉庫中,這個時候就需要用到 Go 多模塊工作區的功能了。
• 進入項目根目錄,初始化我們現在正在開發的模塊
• 文件結構如下
• 回到 hello 項目, vim main.go 將字元串大寫的功能添加上。
• 運行代碼
• 到這裡,演示的代碼已經全部完成
• 使用 Go 多模塊工作區的功能,可以讓我們輕鬆在多個模塊之間切換工作,更能適應現代微服務架構開發。
[1] Go 1.18 新特性多模塊工作區教程:
[2] Go 1.18 is released!:
[3] Tutorial: Getting started with multi-module workspaces:
[4] go-1.18-features:
GO語言(十一):開始使用多模塊工作區
本教程介紹 Go 中多模塊工作區的基礎知識。使用多模塊工作區,您可以告訴 Go 命令您正在同時在多個模塊中編寫代碼,並輕鬆地在這些模塊中構建和運行代碼。
在本教程中,您將在共享的多模塊工作區中創建兩個模塊,對這些模塊進行更改,並在構建中查看這些更改的結果。
本教程需要 go1.18 或更高版本。使用go.dev/dl中的鏈接確保您已在 Go 1.18 或更高版本中安裝了 Go 。
首先,為您要編寫的代碼創建一個模塊。
1、打開命令提示符並切換到您的主目錄。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,為您的代碼創建一個名為工作區的目錄。
3、初始化模塊
我們的示例將創建一個hello依賴於 golang.org/x/example 模塊的新模塊。
創建你好模塊:
使用 . 添加對 golang.org/x/example 模塊的依賴項go get。
在 hello 目錄下創建 hello.go,內容如下:
現在,運行 hello 程序:
在這一步中,我們將創建一個go.work文件來指定模塊的工作區。
在workspace目錄中,運行:
該go work init命令告訴為包含目錄中模塊的工作空間go創建一個文件 。go.work./hello
該go命令生成一個go.work如下所示的文件:
該go.work文件的語法與go.mod相同。
該go指令告訴 Go 應該使用哪個版本的 Go 來解釋文件。它類似於文件中的go指令go.mod 。
該use指令告訴 Go在進行構建時hello目錄中的模塊應該是主模塊。
所以在模塊的任何子目錄中workspace都會被激活。
2、運行工作區目錄下的程序
在workspace目錄中,運行:
Go 命令包括工作區中的所有模塊作為主模塊。這允許我們在模塊中引用一個包,即使在模塊之外。在模塊或工作區之外運行go run命令會導致錯誤,因為該go命令不知道要使用哪些模塊。
接下來,我們將golang.org/x/example模塊的本地副本添加到工作區。然後,我們將向stringutil包中添加一個新函數,我們可以使用它來代替Reverse.
在這一步中,我們將下載包含該模塊的 Git 存儲庫的副本golang.org/x/example,將其添加到工作區,然後向其中添加一個我們將從 hello 程序中使用的新函數。
1、克隆存儲庫
在工作區目錄中,運行git命令來克隆存儲庫:
2、將模塊添加到工作區
該go work use命令將一個新模塊添加到 go.work 文件中。它現在看起來像這樣:
該模塊現在包括example.com/hello模塊和 `golang.org/x/example 模塊。
這將允許我們使用我們將在模塊副本中編寫的新代碼,而不是使用命令stringutil下載的模塊緩存中的模塊版本。
3、添加新功能。
我們將向golang.org/x/example/stringutil包中添加一個新函數以將字元串大寫。
將新文件夾添加到workspace/example/stringutil包含以下內容的目錄:
4、修改hello程序以使用該功能。
修改workspace/hello/hello.go的內容以包含以下內容:
從工作區目錄,運行
Go 命令在go.work文件指定的hello目錄中查找命令行中指定的example.com/hello模塊 ,同樣使用go.work文件解析導入golang.org/x/example。
go.work可以用來代替添加replace 指令以跨多個模塊工作。
由於這兩個模塊在同一個工作區中,因此很容易在一個模塊中進行更改並在另一個模塊中使用它。
現在,要正確發布這些模塊,我們需要發布golang.org/x/example 模塊,例如在v0.1.0. 這通常通過在模塊的版本控制存儲庫上標記提交來完成。發布完成後,我們可以增加對 golang.org/x/example模塊的要求hello/go.mod:
這樣,該go命令可以正確解析工作區之外的模塊。
一起使用GO(golang) 來做一個後台管理系統系列10 使用mod 來管理包
原項目採用gopath來管理的引用庫,但有小夥伴反應說包不好下,雖然我把對應的包做了百度雲盤共享,但小夥伴們仍然感覺不太好用。特別是最近把go SDK升級到1.18.在管理包上終於下決心使用mod來重新重構下包管理。
一、配置啟用Mod
首先那:
確定是否開啟了
如果沒有開啟請開啟它。開啟命令執行:
#設置 使用七牛雲下載
來看下現在的配置:
二、創建項目
上邊都說了如何開啟了。下面介紹下如何使用
1. 可以隨便找一個目錄創建項目:myGoProjectNew
這個時候查看目錄下會多出一個go.mod的文件:
裡面也有了。標識了下SDK的版本1.18
2. 創建 main.go文件
3. 執行:
這時候就會自動下載引用了。
查看Go.mod文件
最後放兩張效果圖:
感覺還可以得點贊收藏哦。想要源碼的私信我獲取源碼。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/236848.html