宣告:本文首發在同名公眾號:王中陽Go,未經授權禁止轉載。
👏👏👏GoFrame
框架今天釋出了v2.7.0正式版本啦!👏👏👏
最大看點
本次版本最大的看點是提供了metric
監控元件,主庫提供了介面化的metric
設計,社群元件提供了基於OpenTelemetry
的metric
介面實現。該特性在預設情況下是關閉的,只有在引入具體的介面實現或者社群實現時才會預設啟用。當前版本同時提供了HTTP Client&Server
的監控指標實現,其他元件的監控指標將在後續版本中陸續提供。詳情請參考GoFrame官方文件:服務監控告警
同時,在本次版本中實現了對dm/mssql/oracle/pgsql/sqlite
資料庫的Save
操作支援,感謝社群小夥伴💖。
由於本次版本變更內容較多,以下中文介紹一些較為重要的改進點,詳細的ChangeLog
請參考:https://github.com/gogf/gf/releases/tag/v2.7.0
完整程式碼變更請參考:https://github.com/gogf/gf/compare/v2.6.0...v2.7.0
元件改進
gdb
-
新增
Stats
介面定義及實現,用於獲取當前資料庫orm
物件維護的連線池資訊:ORM高階特性-連線池狀態 -
新增
FormatUpsert
介面定義及實現,用於不同資料庫型別實現寫入/更新操作,即Save
操作。 -
新增
SqlType
型別,並將已有的sql type
型別定義從string
型別改為了SqlType
型別。 -
新增
Model.OnConflict
方法,用於實現部分資料庫型別當欄位唯一鍵衝突時的更新策略,特別是實現Save操作。 -
修復
ClearTableFieldsAll
方法失效的問題。
ghttp
- 新增
MiddlewareNeverDoneCtx
中介軟體,開發者可以選擇使用,避免客戶端取消請求時服務端收到的context cancel
問題:常見問題 - 新增
http server
的監控指標實現,預設關閉不會影響效能,只有在開啟metrics
特性時才會自動開啟:HTTPServer-監控指標 - 改進
tracing
記錄,將span
名稱從query uri
改為了route uri
,便於檢視時更容易聚合。 - 改進
Request
物件中的EnterTime及LeaveTime
屬性型別,從int64
改為了*gtime.Time
型別。 - 將
WebSocket
方法標記廢棄,將會在未來的大版本中去掉,也會去掉http server
對websocket
的內嵌耦合支援。未來建議透過其他的websocket
開源元件結合http server
一起使用,更加解耦靈活。 - 修復由於
Request Body
預設可重複讀取的問題引發的大檔案上傳佔用記憶體問題。 - 修復
StartPProfServer
方法的pattern
引數失效問題。 - 檔案下載方法
Request.ServeFileDownload
方法新增Access-Control-Expose-Headers Header
返回,以支援ajax
檔案請求。 - 服務配置新增
SwaggerUITemplate
配置項,用於快捷配置SwaggerUI
頁面的HTML
內容。 http server
啟動路由列印時不再列印內建的中介軟體。
gclient
- 修復在開啟服務發現的情況下,所有的
http
請求均會強制走服務發現的域名解析問題。 - 新增
http client
的監控指標實現,預設關閉不會影響效能,只有在開啟metrics
特性時才會自動開啟:HTTPClient-監控指標
gcon
- 新增忽略符號
#
,對cron pattern
中的秒欄位進行佔位,表示忽略秒欄位,用於將6段式的cron pattern
轉換為5段式的linux crontab pattern
:定時任務-表示式 - 修復在確定的秒級任務場景中(例如
2 * * * * *
),當底層時間出現不準確時可能引發兩次任務執行。
gerror
- 修復
gerror.HasCode
方法遞迴邏輯失效的問題。
g
- 改進
DumpJson
方法,用於實現對任意變數按照JSON
格式進行列印。
gcache
- 修復大量建立
Cache
物件引發的goroutine
過多問題。
gcmd
- 新增
RunWithSpecificArgs
方法,用於使用自定義的arguments
執行命令物件。 - 修復部分場景下由於引數結構體名稱和結構體標籤名稱衝突引發的引數丟失問題。
gfsnotify
- 修復
gfsnotify
物件關閉時可能引發的panic
問題。
glog
- 修復
rotate
特性對gz
字尾日誌壓縮檔案的重複rotate
問題。
gmetric
- 新增
gmetric
元件,採用瞭解耦設計,只有介面定義和Noop
的實現,真實的實現在社群元件中。只有引入具體的實現才會真實開啟metric
特性:服務監控告警
gproc
- 修復程序引數解析在
windows
下可能失敗的問題。 - 改進
Signal
訊號監聽實現,允許在執行時增加訊號監聽處理方法。
gview
- 修復由於
os.Getwd
方法執行失敗引起的健壯性問題。
gconv
json.RawMessage
支援接受slice
型別的引數轉換。- 修復
MapDeep
內部轉換缺失Deep
引數引發的遞迴轉換失敗問題。 - 使用
MapRange
改進內部Map
遍歷邏輯,提高執行效能。
社群元件
- 社群
contrib/drivers
資料庫元件的改進:
contrib/drivers/dm
元件新增對Save
操作的支援。contrib/drivers/mssql
元件新增對Save
操作的支援。contrib/drivers/oracle
元件新增對Save
操作的支援,並修復寫入引數不支援gdb.Raw
型別的問題。contrib/drivers/pgsql
元件新增對Save
操作的支援。contrib/drivers/sqlite
元件新增對Save
操作的支援。contrib/drivers/sqlitecgo
元件新增對Save
操作的支援。
- 新增
contrib/metric/otelmetric
元件,實現了對OpenTelemetry Metric
的支援:服務監控告警 - 改進
contrib/nosql/redis
元件:
- 新增
SentinelUsername
及SentinelPassword
引數配置,以擴充套件對Redis Sentinel
模式的支援:Redis-配置管理 - 改進Redis介面實現,開發者可以靈活自定義擴充套件、覆蓋社群元件物件redis.Redis型別的實現:Redis-介面化設計
- 改進
contrib/registry/etcd
元件,允許開發者配置etcd
連結的校驗資訊。 - 改進
contrib/rpc/grpcx
元件:
- 對啟用
tracing
特性時,安全截斷請求內容。 - 新增對
logger
配置項的支援,允許在配置檔案中透過logger
配置項配置grpc server
的日誌物件:服務端配置
- 改進
contrib/trace/otlphttp
及contrib/trace/otlpgrpc
元件,修復在短程序場景下正常ShutDown
仍可能會出現的trace
資料丟失問題。
開發工具
- 改進
gen dao
生成的entity
原始檔,增加orm
標籤,以提高資料庫查詢結果轉換到entity
物件的效率。 - 改進
gen service
命令,修復生成的原始碼檔案中,方法順序不一致問題。 - 改進
build
命令,將生成的二進位制檔案存放目錄path
引數的預設值從./temp
改為了.
即當前目錄,以解決該引數自定義失效的問題。 - 改進
init
命令,新增-module/g
引數,用於在初始化專案時顯式指定go module
名稱。 - 修復
gen dao
在多個資料庫生成配置下,使用clear
引數時刪除已生成的dao
原始檔的問題。 - 修復
gen pbentity
命令,使用自定義的jsonCase
引數無效的問題。 - 修復
run
命令的-w
指定監聽目錄引數失效的問題。
早日上岸!
我們搞了一個免費的面試真題共享群,互通有無,一起刷題進步。
沒準能讓你能刷到自己意向公司的最新面試題呢。
感興趣的朋友們可以加我微信:wangzhongyang1993,備註:面試群。
本文首發在我的同名公眾號:王中陽Go,未經授權禁止轉載。