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

2022-03-09 09:00:27

大家好啊!萬眾矚目的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、資料元件

  1. /database/gdb
    1. 廢棄Table方法,統一使用Model方法建立Model物件。
    2. 廢棄Model中的Struct/Structs方法,統一使用Scan方法執行查詢結果到Struct物件/物件陣列對映轉換:
    3. 廢棄BatchInsert/BatchReplace/BatchSave方法,統一使用Insert/Replace/Save方法實現,內部自動實現引數型別識別採用單條寫入還是批次寫入:
    4. 增加DoFilter介面方法,用於ORM提交執行SQL&Args到底層driver之前的SQL&Args自定義過濾:
    5. 增加DoCommit介面方法,用於ORM提交執行SQL&Args到底層driver之前的自定義處理:https://
    6. 增加ConvertDataForRecord介面方法,用於自定義的資料轉換處理。
    7. 增加Raw方法,用於通過原始SQL語句構建Model物件,隨後可以使用Model的鏈式操作以及各種特性:
    8. 增加Handler特性,用於自定義的Model物件修改,並返回新的Model物件,可輕鬆地複用常見的邏輯
    9. 增加Union/UnionAll特性,用於多條SQL/Model的查詢結果合併:
    10. 增加With特性對條件查詢以及排序語句的設定支援:
    11. 增加OnDuplicate/OnDuplicateEx方法,用於指定Save方法的更新/不更新欄位:
    12. 增加Wheref/WhereOrf方法,用於帶有格式化字串語句的條件傳遞:
    13. 增加WhereLT/WhereLTE/WhereGT/WhereGTE以及WhereOrLT/WhereOrLTE/WhereOrGT/WhereOrGTE方法,用以為ORM新增常見的比較條件:https://
    14. 增加WherePrefix/WhereOrPrefix方法,用以在為條件欄位加上表字首,常用於關聯查詢中:https://
    15. 增加FieldsPrefix/FieldsExPrefix方法,用於為查詢的欄位增加自定義的表字首,常用於關聯查詢中:https://
    16. 增加FieldsCount/FieldsSum/FieldsMin/FieldsMax/FieldsAvg方法,用於增加常見的統一查詢條件:https://
    17. 增加LeftJoinOnField/RightJoinOnField/InnerJoinOnField方法,用於便捷關聯帶有相同欄位名稱的表:https://
    18. 增加OmitEmptyWhere/OmitEmptyData方法,用於特定過濾Where條件和Data資料中的空值資料:
    19. 增加OmitNil/OmitNilWhere/OmitNilData方法,用於特定過濾Where條件和Data資料中的nil資料:
    20. 增加TimeZone設定項,用於資料庫查詢的自定義時區轉換(目前支援mysql/pgsql):
    21. 改進Cache快取特性,支援增加準確的快取引數控制:https://
    22. 增加Close方法,用於手動關閉資料庫連線:https://
    23. 去掉ORM在使用沒有自定義設定時預設100連線數的設定限制。
    24. 改進時間維護特性,不再自動過濾開發者提交的CreatedAt/UpdatedAt/DeletedAt相關引數,意味著開發者可以在ORM操作中自定義相關時間欄位的更新。
    25. 改進資料庫執行的SQL紀錄檔記錄,增加影響行數記錄:https://
    26. 介面方法HandleSqlBeforeCommit名稱修改為了DoCommit
    27. 資料庫方法操作統一增加context.Context作為第一必須引數。
    28. 修復gdb元件的With特性多層級查詢失效問題。
    29. 刪除查詢結果型別Record/Result的所有已廢棄的方法。
    30. 單元測試完善。
  2. /database/gredis
    1. 採用介面卡模式,以介面化設計重構該元件,以提高擴充套件性:

    2. 預設提供基於第三方goredis包的介面卡實現,增加了對Redis叢集的支援:
    3. 由於叢集特性的支援,組態檔格式發生改變:

2、網路元件

  1. /net/ghttp
    1. 新增路由註冊方式:
    2. 預設將Request物件注入到ctx上下文物件中,並增加RequestFromCtx/g.RequestFromCtx方法獲取ctx中的Request物件。
    3. Client功能特性進行抽離,封裝為gclient元件:
    4. Server紀錄檔增加對ctx上下文鏈路資訊列印的支援,並改進紀錄檔格式:
    5. 引數獲取返回統一使用*gvar.Var泛型物件。
    6. 廢棄ghttp中相關的HTTP Client直接操作方法,必須通過建立Client物件來實現使用者端存取操作。
    7. 廢棄Controller路由註冊方式,並刪除相關實現邏輯程式碼。
  2. /net/gtrace
    1. 升級到最新的正式版。
    2. 完善全新的鏈路跟蹤使用檔案:

3、系統元件

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

4、錯誤處理

  1. /errors/gerror
    1. 增加Message方法,用於獲取指定錯誤碼的錯誤資訊。
    2. 增加CodeMessage方法,用於獲取指定錯誤的錯誤碼資訊。
    3. 增加NewOption方法,用於自定義設定的錯誤物件建立,獻給框架高階玩家。
    4. 增加HasStack方法,用於判斷給定的error介面物件是否實現(包含)了堆疊資訊。
    5. 錯誤碼從整型改為介面物件,以實現可客製化性並提高可延伸性,詳情參考gcode元件介紹:
    6. 提高易用性,改進NewCode/NewCodeSkip/WrapCode/WrapCodeSkip方法,調增text輸入引數為非必須,預設使用對應錯誤碼的Message資訊。
  2. /errors/gcode
    1. 增加gcode錯誤碼元件,提供可客製化型和擴充套件性極強的錯誤碼管理,結合gerror元件實現強大的錯誤處理:

5、其他元件

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

其他大量的改進細節,這裡不再贅述,感興趣的小夥伴可參閱官網 

三、CLI工具鏈 

  1. 採用全新gcmd命令列物件封裝重構實現。
  2. 改進init命令,支援SingleRepo/MonoRepo兩種倉庫初始化。並且專案初始化不再依賴遠端倉庫。
  3. 改進gen dao命令,採用全新的V2工程化設計,自動生成entity/dao/dto程式碼檔案。
  4. 去掉update命令,工具的更新統一走 
  5. 去掉get命令。
  6. 全新檔案:
展開閱讀全文