天天看點

Go企業級架構GoFrame釋出全新v2.0版本

作者:Golang

大家好啊!萬衆矚目的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的大量改進

  • 詳細介紹:資料庫ORM

9、其他重要改進

1)日志元件Handler特性

  • 采用中間件設計
  • 支援多個Handler處理
  • 為開發者自定義日志處理提供了更靈活強大的支援
  • 更多詳細介紹:日志元件-Handler

2)日志元件顔色列印

  • 在終端中預設輸出顔色列印
  • 預設不同級别不同的顔色,可配置
  • 輸出到檔案/自定義Writer預設關閉,可通過相關配置開啟
  • 更多詳細介紹:日志元件-顔色列印

4)調試模式介紹完善

  • 更多詳細介紹:調試模式

二、功能改進

1、資料元件

  1. /database/gdb廢棄Table方法,統一使用Model方法建立Model對象。廢棄Model中的Struct/Structs方法,統一使用Scan方法執行查詢結果到Struct對象/對象數組映射轉換:ORM查詢-Scan廢棄BatchInsert/BatchReplace/BatchSave方法,統一使用Insert/Replace/Save方法實作,内部自動實作參數類型識别采用單條寫入還是批量寫入:ORM鍊式操作-寫入儲存增加DoFilter接口方法,用于ORM送出執行SQL&Args到底層driver之前的SQL&Args自定義過濾:ORM接口開發-回調處理增加DoCommit接口方法,用于ORM送出執行SQL&Args到底層driver之前的自定義處理:https://增加ConvertDataForRecord接口方法,用于自定義的資料轉換處理。ORM接口開發-回調處理增加Raw方法,用于通過原始SQL語句建構Model對象,随後可以使用Model的鍊式操作以及各種特性:ORM鍊式操作-模型建立增加Handler特性,用于自定義的Model對象修改,并傳回新的Model對象,可輕松地複用常見的邏輯:ORM鍊式操作-Handler特性增加Union/UnionAll特性,用于多條SQL/Model的查詢結果合并:ORM查詢-Union/UnionAll增加With特性對條件查詢以及排序語句的配置支援:模型關聯-With特性增加OnDuplicate/OnDuplicateEx方法,用于指定Save方法的更新/不更新字段:ORM鍊式操作-寫入儲存增加Wheref/WhereOrf方法,用于帶有格式化字元串語句的條件傳遞:ORM查詢-Where/WhereOr/WhereNot增加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資料中的空值資料:ORM鍊式操作-字段過濾增加OmitNil/OmitNilWhere/OmitNilData方法,用于特定過濾Where條件和Data資料中的nil資料:ORM鍊式操作-字段過濾增加TimeZone配置項,用于資料庫查詢的自定義時區轉換(目前支援mysql/pgsql):ORM使用配置改進Cache緩存特性,支援增加準确的緩存參數控制:https://增加Close方法,用于手動關閉資料庫連接配接:https://去掉ORM在使用沒有自定義配置時預設100連接配接數的配置限制。改進時間維護特性,不再自動過濾開發者送出的CreatedAt/UpdatedAt/DeletedAt相關參數,意味着開發者可以在ORM操作中自定義相關時間字段的更新。改進資料庫執行的SQL日志記錄,增加影響行數記錄:https://接口方法HandleSqlBeforeCommit名稱修改為了DoCommit。資料庫方法操作統一增加context.Context作為第一必須參數。修複gdb元件的With特性多層級查詢失效問題。删除查詢結果類型Record/Result的所有已廢棄的方法。單元測試完善。
  2. /database/gredis
    1. 采用擴充卡模式,以接口化設計重構該元件,以提高擴充性:Redis-接口化設計
    2. 預設提供基于第三方goredis包的擴充卡實作,增加了對Redis叢集的支援:Redis-配置管理
    3. 由于叢集特性的支援,配置檔案格式發生改變:Redis-配置管理

2、網絡元件

  1. /net/ghttp新增路由注冊方式:路由注冊-規範路由預設将Request對象注入到ctx上下文對象中,并增加RequestFromCtx/g.RequestFromCtx方法擷取ctx中的Request對象。将Client功能特性進行抽離,封裝為gclient元件:HTTPClientServer日志增加對ctx上下文鍊路資訊列印的支援,并改進日志格式:鍊路跟蹤參數擷取傳回統一使用*gvar.Var泛型對象。廢棄ghttp中相關的HTTP Client直接操作方法,必須通過建立Client對象來實作用戶端通路操作。廢棄Controller路由注冊方式,并删除相關實作邏輯代碼。
  2. /net/gtrace更新go.opentelemetry.io/otel到最新的正式版。完善全新的鍊路跟蹤使用文檔:鍊路跟蹤

3、系統元件

  1. /os/glog為推進可觀測性特性,落實鍊路跟蹤規範,所有日志列印方法均增加context.Context參數。日志元件增加了Handler特性,采用中間件設計、支援多個Handler處理,為開發者自定義日志處理提供了更靈活強大的支援:日志元件-Handler日志元件增加了對内容的顔色列印特性支援,在終端中預設輸出顔色列印,輸出到檔案/自定義Writer預設關閉、可通過相關配置開啟:日志元件-顔色列印廢棄Println方法。文檔更新:日志元件
  2. /os/gres新增Export方法用于将資源元件中的檔案導出到本地磁盤:資源管理-方法介紹
  3. /os/gfile新增SizeFormat方法用于擷取指定檔案格式化後的大小字元串。文檔更新:檔案管理-gfile
  4. /os/gcache采用擴充卡模式,以接口化設計重構該元件,以提高擴充性:緩存管理-接口化設計預設提供了基于程序記憶體的緩存實作:緩存管理-記憶體緩存所有操作方法增加了context.Context上下文參數。參數擷取傳回統一使用*gvar.Var泛型對象。增加Must*方法,用以直接擷取參數并在産生錯誤時直接panic。
  5. /os/gcfg采用擴充卡模式,以接口化設計重構該元件,以提高擴充性:配置管理-接口化設計預設提供了基于檔案系統的配置管理實作:配置管理參數擷取傳回統一使用*gvar.Var泛型對象。所有操作方法增加了context.Context上下文參數。增加GetWithEnv方法,當配置擴充卡中無法查找到對應的參數時,将會自動讀取環境變量中的相應參數:配置管理-配置讀取增加GetWithCmd方法,當配置擴充卡中無法查找到對應的參數時,将會自動讀取指令行參數中的相應參數:配置管理-配置讀取增加Must*方法,用以直接擷取參數并在産生錯誤時直接panic。配置元件易用性改進,通過單例對象通路配置元件将會按照toml/yaml/yml/json/ini/xml檔案字尾自動檢索配置檔案:配置管理
  6. /os/gcmd參數擷取傳回統一使用*gvar.Var泛型對象。全新的多層級指令行管理方式,支援自動生成指令行使用提示:指令管理-指令行對象增加基于對象的指令行管理方式,更适合大量的終端指令場景:指令管理-結構化參數
  7. /os/genv參數擷取傳回統一使用*gvar.Var泛型對象。
  8. /os/gcron定時任務方法定義增加context.Context參數。所有建立定時任務方法增加context.Context參數。文檔更新:定時任務-gcron
  9. /os/gtime廢棄Second/Millisecond/Microsecond/Nanosecond包方法,使用Timestamp/TimestampMilli/TimestampMicro/TimestampNano方法替代。文檔更新:時間管理-gtime
  10. /os/gtimer定時器方法定義增加context.Context參數。所有建立定時器方法增加context.Context參數。改進基于優先級隊列資料結構存儲的定時任務執行檢測機制,提高執行性能。文檔更新:定時器-gtimer
  11. /os/grpool回調方法定義增加context.Context參數。goroutine池任務添加方法增加context.Context參數。文檔更新:協程管理-grpool
  12. /os/gsessiongsession.Storage接口增加ctx上下文參數輸輸入,用于承接上下文資訊、實作完整的鍊路跟蹤。并未保證嚴謹性增加error傳回參數:Session參數擷取傳回統一使用*gvar.Var泛型對象。
  13. /os/gview模闆解析方法統一增加context.Context參數。增加plus/minus/times/divide四則運算内置模闆方法。文檔更新:模闆引擎
  14. /os/gstructs将架構internal中的structs包開放,命名為gstructs,用于struct反射操作的進階使用包:對象資訊-gstructs

4、錯誤處理

  1. /errors/gerror

    增加Message方法,用于擷取指定錯誤碼的錯誤資訊。增加CodeMessage方法,用于擷取指定錯誤的錯誤碼資訊。增加NewOption方法,用于自定義配置的錯誤對象建立,獻給架構進階玩家。增加HasStack方法,用于判斷給定的error接口對象是否實作(包含)了堆棧資訊。錯誤碼從整型改為接口對象,以實作可定制性并提高可擴充性,詳情參考gcode元件介紹:錯誤處理-錯誤碼特性提高易用性,改進NewCode/NewCodeSkip/WrapCode/WrapCodeSkip方法,調增text輸入參數為非必須,預設使用對應錯誤碼的Message資訊。

  2. /errors/gcode增加gcode錯誤碼元件,提供可定制型和擴充性極強的錯誤碼管理,結合gerror元件實作強大的錯誤處理:錯誤處理-錯誤碼使用

5、其他元件

  1. /container/garray各數組類型統一增加At方法,用于直接擷取傳回索引位置的資料。文檔更新:數組類型-方法介紹
  2. /debug/gdebug增加TestDataContent方法,用于直接擷取測試包下testdata目錄下指定路徑檔案内容。文檔更新:調試功能-gdebug
  3. /encoding/gjson廢棄大部分的Get*方法,統一使用Get方法擷取指定pattern的内容,并統一傳回*gvar.Var泛型對象,開發者根據業務場景自行通過對應方法便捷轉換為特定類型變量。增加若幹Must*方法。使用文檔全面更新:https://
  4. /frame/g增加ModelRaw方法,用于便捷建立基于原生SQL的資料庫Model對象。為通過/frame/g子產品建立的ORM對象增加logger配置,通過自動讀取配置檔案,自動初始化:ORM使用配置為通過/frame/g子產品建立的Server對象增加logger配置,通過自動讀取配置檔案,自動初始化:服務配置
  5. /frame/gmvc标記廢除gmvc耦合子產品,未來不再進一步支援。
  6. /util/gutil改進實作Dump方法,不再使用json包實作類型列印,而是自實作了對任意類型的列印特性,并且支援列印詳細的資料類型:工具方法-gutil增加SliceToMapWithColumnAsKey方法,用以将Slice按照一定規則轉換為Map。
  7. /utils/gvalid增加bail校驗規則,以及Bail鍊式操作方法,用以在資料校驗不通過時直接退出校驗,不再執行後續校驗規則。增加datetime校驗規則,用以校驗常用日期時間類型,其中日期之間支援的連接配接符号隻支援-,格式如:2006-01-02 12:00:00。去掉包校驗方法,統一使用鍊式操作實作資料校驗。是以校驗方法增加context.Context參數。全新、超完善的資料校驗元件使用文檔:資料校驗

三、CLI工具鍊

  1. 采用全新gcmd指令行對象封裝重構實作。
  2. 改進init指令,支援SingleRepo/MonoRepo兩種倉庫初始化。并且項目初始化不再依賴遠端倉庫。
  3. 改進gen dao指令,采用全新的V2工程化設計,自動生成entity/dao/dto代碼檔案。
  4. 去掉update指令,工具的更新統一走 https://github.com/gogf/gf-cli
  5. 去掉get指令。
  6. 全新文檔:開發工具

繼續閱讀