大家好啊!萬眾矚目的GoFrame v2
版本終於釋出了正式版本!本次版本包含了大量改進以及新特性,同時新增了一些開創性的功能特性。
去年夏天到今年春天,一路以來的努力,希望大家滿意。
感謝所有社群小夥伴的貢獻,感謝社群朋友們的支援!
新的一年,我們繼續,腳踏實地,不忘初心!
一、重要特性
1、新版工程設計
- 更加嚴謹規範
- 命名風格的規範
- 指標與值傳遞引數的規範
- 進一步簡便、提高開發效率
- 新版開發工具支援工程規範準確落地
Entity/DAO/DO
特性- 面向介面化設計
- 更多詳細介紹:
2、全鏈路跟蹤特性
- 可觀測性更進一步:大膽的前瞻以及決心
- 框架預設啟用
OpenTelemetry
特性 - 框架預設建立
TraceID
,按照OpenTelemetry
生成標準 - 框架核心元件均支援鏈路跟蹤資訊傳遞
- 紀錄檔元件支援鏈路資訊列印
- 更多詳細介紹:
3、規範路由註冊特性
- 規範化API按照結構化程式設計設計
- 規範化API介面方法引數風格定義
- 更加簡化的路由註冊與維護
- 統一介面返回資料格式設計
- 自動的API引數物件化接收與校驗
- 自動生成基於標準
OpenAPIv3
協定的介面檔案 - 自動生成
SwaggerUI
頁面 - 更多詳細介紹:
4、全錯誤堆疊特性
- 框架層面所做的重大決定
- 框架 所有 元件錯誤均支援錯誤堆疊
- 詳細介紹:
5、全新錯誤碼特性
- 採用介面化設計,擴充套件性高
- 提供可供選擇的常見錯誤碼
- 框架核心組價底層已增加錯誤碼支援,例如根據
error
中的錯誤碼可以識別是否DB
執行錯誤 - 更多詳細介紹:
6、元件介面化設計
- 自頂向下統一化的介面化設計
- 核心元件均採用介面化設計
- 更高的擴充套件性、可客製化性
- 更多詳細介紹:
7、框架泛型的支援
- 什麼是框架
gvar
泛型? - 框架
gvar
泛型在框架核心元件中的大量使用 - 框架
gvar
泛型的重要價值 - 為什麼不建議在頂層業務中使用泛型
- 更多詳細介紹:
8、ORM的大量改進
- 詳細介紹:
9、其他重要改進
1)紀錄檔元件Handler
特性
- 採用中介軟體設計
- 支援多個
Handler
處理 - 為開發者自定義紀錄檔處理提供了更靈活強大的支援
- 更多詳細介紹:
2)紀錄檔元件顏色列印
- 在終端中預設輸出顏色列印
- 預設不同級別不同的顏色,可設定
- 輸出到檔案/自定義
Writer
預設關閉,可通過相關設定開啟 - 更多詳細介紹:
4)偵錯模式介紹完善
- 更多詳細介紹:
二、功能改進
1、資料元件
/database/gdb
- 廢棄
Table
方法,統一使用Model
方法建立Model
物件。 - 廢棄
Model
中的Struct/Structs
方法,統一使用Scan
方法執行查詢結果到Struct
物件/物件陣列對映轉換: - 廢棄
BatchInsert/BatchReplace/BatchSave
方法,統一使用Insert/Replace/Save
方法實現,內部自動實現引數型別識別採用單條寫入還是批次寫入: - 增加
DoFilter
介面方法,用於ORM
提交執行SQL&Args
到底層driver
之前的SQL&Args
自定義過濾: - 增加
DoCommit
介面方法,用於ORM
提交執行SQL&Args
到底層driver
之前的自定義處理:https:// - 增加
ConvertDataForRecord
介面方法,用於自定義的資料轉換處理。 - 增加
Raw
方法,用於通過原始SQL
語句構建Model
物件,隨後可以使用Model
的鏈式操作以及各種特性: - 增加
Handler
特性,用於自定義的Model
物件修改,並返回新的Model
物件,可輕鬆地複用常見的邏輯: - 增加
Union/UnionAll
特性,用於多條SQL/Model
的查詢結果合併: - 增加
With
特性對條件查詢以及排序語句的設定支援: - 增加
OnDuplicate/OnDuplicateEx
方法,用於指定Save
方法的更新/不更新欄位: - 增加
Wheref/WhereOrf
方法,用於帶有格式化字串語句的條件傳遞: - 增加
WhereLT/WhereLTE/WhereGT/WhereGTE
以及WhereOrLT/WhereOrLTE/WhereOrGT/WhereOrGTE
方法,用以為ORM新增常見的比較條件:https:// - 增加
WherePrefix/WhereOrPrefix
方法,用以在為條件欄位加上表字首,常用於關聯查詢中:https:// - 增加
FieldsPrefix/FieldsExPrefix
方法,用於為查詢的欄位增加自定義的表字首,常用於關聯查詢中:https:// - 增加
FieldsCount/FieldsSum/FieldsMin/FieldsMax/FieldsAvg
方法,用於增加常見的統一查詢條件:https:// - 增加
LeftJoinOnField/RightJoinOnField/InnerJoinOnField
方法,用於便捷關聯帶有相同欄位名稱的表:https:// - 增加
OmitEmptyWhere/OmitEmptyData
方法,用於特定過濾Where
條件和Data
資料中的空值資料: - 增加
OmitNil/OmitNilWhere/OmitNilData
方法,用於特定過濾Where
條件和Data
資料中的nil
資料: - 增加
TimeZone
設定項,用於資料庫查詢的自定義時區轉換(目前支援mysql/pgsql
): - 改進
Cache
快取特性,支援增加準確的快取引數控制:https:// - 增加
Close
方法,用於手動關閉資料庫連線:https:// - 去掉
ORM
在使用沒有自定義設定時預設100
連線數的設定限制。 - 改進時間維護特性,不再自動過濾開發者提交的
CreatedAt/UpdatedAt/DeletedAt
相關引數,意味著開發者可以在ORM
操作中自定義相關時間欄位的更新。 - 改進資料庫執行的SQL紀錄檔記錄,增加影響行數記錄:https://
- 介面方法
HandleSqlBeforeCommit
名稱修改為了DoCommit
。 - 資料庫方法操作統一增加
context.Context
作為第一必須引數。 - 修復
gdb
元件的With
特性多層級查詢失效問題。 - 刪除查詢結果型別
Record/Result
的所有已廢棄的方法。 - 單元測試完善。
- 廢棄
/database/gredis
-
採用介面卡模式,以介面化設計重構該元件,以提高擴充套件性:
- 預設提供基於第三方
goredis
包的介面卡實現,增加了對Redis
叢集的支援: - 由於叢集特性的支援,組態檔格式發生改變:
-
2、網路元件
/net/ghttp
- 新增路由註冊方式:
- 預設將
Request
物件注入到ctx
上下文物件中,並增加RequestFromCtx/g.RequestFromCtx
方法獲取ctx
中的Request
物件。 - 將
Client
功能特性進行抽離,封裝為gclient
元件: Server
紀錄檔增加對ctx
上下文鏈路資訊列印的支援,並改進紀錄檔格式:- 引數獲取返回統一使用
*gvar.Var
泛型物件。 - 廢棄
ghttp
中相關的HTTP Client
直接操作方法,必須通過建立Client
物件來實現使用者端存取操作。 - 廢棄
Controller
路由註冊方式,並刪除相關實現邏輯程式碼。
/net/gtrace
- 升級
到最新的正式版。
- 完善全新的鏈路跟蹤使用檔案:
- 升級
3、系統元件
/os/glog
- 為推進可觀測性特性,落實鏈路跟蹤規範,所有紀錄檔列印方法均增加
context.Context
引數。 - 紀錄檔元件增加了
Handler
特性,採用中介軟體設計、支援多個Handler
處理,為開發者自定義紀錄檔處理提供了更靈活強大的支援: - 紀錄檔元件增加了對內容的顏色列印特性支援,在終端中預設輸出顏色列印,輸出到檔案/自定義
Writer
預設關閉、可通過相關設定開啟: - 廢棄
Println
方法。 - 檔案更新:
- 為推進可觀測性特性,落實鏈路跟蹤規範,所有紀錄檔列印方法均增加
/os/gres
- 新增
Export
方法用於將資源元件中的檔案匯出到本地磁碟:
- 新增
/os/gfile
- 新增
SizeFormat
方法用於獲取指定檔案格式化後的大小字串。 - 檔案更新:
- 新增
/os/gcache
- 採用介面卡模式,以介面化設計重構該元件,以提高擴充套件性:
- 預設提供了基於程序記憶體的快取實現:
- 所有操作方法增加了
context.Context
上下文引數。 - 引數獲取返回統一使用
*gvar.Var
泛型物件。 - 增加
Must*
方法,用以直接獲取引數並在產生錯誤時直接panic
。
/os/gcfg
- 採用介面卡模式,以介面化設計重構該元件,以提高擴充套件性:
- 預設提供了基於檔案系統的設定管理實現:
- 引數獲取返回統一使用
*gvar.Var
泛型物件。 - 所有操作方法增加了
context.Context
上下文引數。 - 增加
GetWithEnv
方法,當設定介面卡中無法查詢到對應的引數時,將會自動讀取環境變數中的相應引數: - 增加
GetWithCmd
方法,當設定介面卡中無法查詢到對應的引數時,將會自動讀取命令列引數中的相應引數: - 增加
Must*
方法,用以直接獲取引數並在產生錯誤時直接panic
。 - 設定元件易用性改進,通過單例物件存取設定元件將會按照
toml/yaml/yml/json/ini/xml
檔案字尾自動檢索組態檔:
/os/gcmd
- 引數獲取返回統一使用
*gvar.Var
泛型物件。 - 全新的多層級命令列管理方式,支援自動生成命令列使用提示:
- 增加基於物件的命令列管理方式,更適合大量的終端命令場景:
- 引數獲取返回統一使用
/os/genv
- 引數獲取返回統一使用
*gvar.Var
泛型物件。
- 引數獲取返回統一使用
/os/gcron
- 定時任務方法定義增加
context.Context
引數。 - 所有建立定時任務方法增加
context.Context
引數。 - 檔案更新:
- 定時任務方法定義增加
/os/gtime
- 廢棄
Second/Millisecond/Microsecond/Nanosecond
包方法,使用Timestamp/TimestampMilli/TimestampMicro/TimestampNano
方法替代。 - 檔案更新:
- 廢棄
/os/gtimer
- 定時器方法定義增加
context.Context
引數。 - 所有建立定時器方法增加
context.Context
引數。 - 改進基於優先順序佇列資料結構儲存的定時任務執行檢測機制,提高執行效能。
- 檔案更新:
- 定時器方法定義增加
/os/grpool
- 回撥方法定義增加
context.Context
引數。 goroutine
池任務新增方法增加context.Context
引數。- 檔案更新:
- 回撥方法定義增加
/os/gsession
gsession.Storage
介面增加ctx
上下文引數輸輸入,用於承接上下文資訊、實現完整的鏈路跟蹤。並未保證嚴謹性增加error
返回引數:- 引數獲取返回統一使用
*gvar.Var
泛型物件。
/os/gview
- 模板解析方法統一增加
context.Context
引數。 - 增加
plus/minus/times/divide
四則運算內建模板方法。 - 檔案更新:
- 模板解析方法統一增加
/os/gstructs
- 將框架
internal
中的structs
包開放,命名為gstructs
,用於struct
反射操作的高階使用包:
- 將框架
4、錯誤處理
/errors/gerror
- 增加
Message
方法,用於獲取指定錯誤碼的錯誤資訊。 - 增加
CodeMessage
方法,用於獲取指定錯誤的錯誤碼資訊。 - 增加
NewOption
方法,用於自定義設定的錯誤物件建立,獻給框架高階玩家。 - 增加
HasStack
方法,用於判斷給定的error介面物件是否實現(包含)了堆疊資訊。 - 錯誤碼從整型改為介面物件,以實現可客製化性並提高可延伸性,詳情參考
gcode
元件介紹: - 提高易用性,改進
NewCode/NewCodeSkip/WrapCode/WrapCodeSkip
方法,調增text
輸入引數為非必須,預設使用對應錯誤碼的Message
資訊。
- 增加
/errors/gcode
- 增加
gcode
錯誤碼元件,提供可客製化型和擴充套件性極強的錯誤碼管理,結合gerror
元件實現強大的錯誤處理:
- 增加
5、其他元件
/container/garray
- 各陣列型別統一增加
At
方法,用於直接獲取返回索引位置的資料。 - 檔案更新:
- 各陣列型別統一增加
/debug/gdebug
- 增加
TestDataContent
方法,用於直接獲取測試包下testdata
目錄下指定路徑檔案內容。 - 檔案更新:
- 增加
/encoding/gjson
- 廢棄大部分的
Get*
方法,統一使用Get
方法獲取指定pattern
的內容,並統一返回*gvar.Var
泛型物件,開發者根據業務場景自行通過對應方法便捷轉換為特定型別變數。 - 增加若干
Must*
方法。 - 使用檔案全面更新:https://
- 廢棄大部分的
/frame/g
- 增加
ModelRaw
方法,用於便捷建立基於原生SQL
的資料庫Model
物件。 - 為通過
/frame/g
模組建立的ORM
物件增加logger
設定,通過自動讀取組態檔,自動初始化: - 為通過
/frame/g
模組建立的Server
物件增加logger
設定,通過自動讀取組態檔,自動初始化:
- 增加
/frame/gmvc
- 標記廢除
gmvc
耦合模組,未來不再進一步支援。
- 標記廢除
/util/gutil
- 改進實現
Dump
方法,不再使用json
包實現型別列印,而是自實現了對任意型別的列印特性,並且支援列印詳細的資料型別: - 增加
SliceToMapWithColumnAsKey
方法,用以將Slice
按照一定規則轉換為Map
。
- 改進實現
/utils/gvalid
- 增加
bail
校驗規則,以及Bail
鏈式操作方法,用以在資料校驗不通過時直接退出校驗,不再執行後續校驗規則。 - 增加
datetime
校驗規則,用以校驗常用日期時間型別,其中日期之間支援的連線符號只支援-
,格式如:2006-01-02 12:00:00
。 - 去掉包校驗方法,統一使用鏈式操作實現資料校驗。
- 所以校驗方法增加
context.Context
引數。 - 全新、超完善的資料校驗元件使用檔案:
- 增加
其他大量的改進細節,這裡不再贅述,感興趣的小夥伴可參閱官網
三、CLI工具鏈
- 採用全新
gcmd
命令列物件封裝重構實現。 - 改進
init
命令,支援SingleRepo/MonoRepo
兩種倉庫初始化。並且專案初始化不再依賴遠端倉庫。 - 改進
gen dao
命令,採用全新的V2
工程化設計,自動生成entity/dao/dto
程式碼檔案。 - 去掉
update
命令,工具的更新統一走 - 去掉
get
命令。 - 全新檔案: