golang1.18,Golang 116

本文目錄一覽:

嘗試用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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:01
下一篇 2024-12-12 12:01

相關推薦

  • 使用Golang調用Python

    在現代軟體開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • Golang中使用strings.Split函數進行字元串分割的方法

    一、Split函數的基本用法 字元串是編程中常見的數據類型,它們可以在程序中被處理、存儲和傳輸。在Go語言中,字元串也是一個基本的數據類型,而strings包提供了一些操作字元串的…

    編程 2025-04-23
  • Golang環境變數全面解析

    Golang是一門非常流行的開發語言,擁有高效的CGO、簡單易懂的語法、高並發能力等優點,然而它也需要使用環境變數來配置一些參數。在本篇文章中,我們將從多個方面對Golang環境變…

    編程 2025-04-23
  • 深入下探golang http server

    Go語言已經成為了軟體開發領域的熱門語言,它的高性能、應用廣泛、安全性好,使得它成為了眾多開發者心目中的首選編程語言。在眾多應用場景中,golang http server的應用非…

    編程 2025-04-23
  • Compacted:一個高性能的Golang緩存庫

    一、簡介 Compacted是一個使用Golang編寫的緩存庫,旨在提供高性能的內存緩存功能。相對於其他常見的緩存庫,Compacted在內存使用和性能方面都做了一定的優化。 緩存…

    編程 2025-04-23
  • Golang nil解析

    一、什麼是nil Nil是Golang語言中的一個預定義標識符,表示一個零值對象,通常表示一個空指針。Nil被定義為指針類型、函數類型、介面類型、map類型、Slice類型、Cha…

    編程 2025-04-23
  • Golang中文社區介紹

    Go語言或者叫Golang是一個開源項目,目前是由Google開發維護的一種靜態類型、並發安全、編譯型的編程語言。Go語言的特點是結構清晰、並發能力強、具有垃圾回收機制並且支持跨平…

    編程 2025-04-23
  • 詳解golang walk控制項庫

    Golang提供的可視化庫有很多個,其中walk是一個比較好用且強大的庫。本文將從多個方面對walk進行詳細闡述,包括基本控制項、布局、菜單、圖標等方面的內容。 一、控制項基礎 Gol…

    編程 2025-04-22
  • Golang泛型詳解

    Golang泛型成為眾多開發人員關注的話題,因為它使得代碼更加通用、可重用、簡單、易於維護。那麼,什麼是泛型、為什麼它如此重要,如何使用它?本文將從多個方面為您詳細闡述Golang…

    編程 2025-04-20

發表回復

登錄後才能評論