GF(Go Frame)
是一款模塊化、高性能、生產級的 Go 基礎開發框架。實現了比較完善的基礎設施建設以及開發工具鏈,提供了常用的基礎開發模塊,如:緩存、日誌、隊列、數組、集合、容器、定時器、命令行、內存鎖、對象池、配置管理、資源管理、數據校驗、數據編碼、定時任務、資料庫 ORM 、TCP/UDP 組件、進程管理 /通信等等。並提供了 Web 服務開發的系列核心組件,如:Router
、Cookie
、Session
、Middleware
、服務註冊、模板引擎等等,支持熱重啟、熱更新、域名綁定、TLS/HTTPS
、Rewrite
等特性。
OSC 最佳開源項目評選開始了,如果您喜歡GoFrame
,歡迎為GoFrame
投上您寶貴的一票🙏 https://www.oschina.net/p/goframe
由於GoFrame
是模塊化設計,因此每個版本的更新記錄都會以模塊的形式進行介紹。
重要更新:
json
操作從標準庫替換為json-iterator/go
,提高操作效率。Redis
適配器支持。其中內存適配器默認核心模塊提供,Redis
適配器由社區模塊提供: https://goframe.org/os/gcache/adapterWeb Server
增加所有配置項示例: https://goframe.org/net/ghttp/config/exampleORM
新增基於Redis
的SQL
緩存適配器: https://goframe.org/database/gdb/model/cacheORM
新增模型關聯實驗特性: https://goframe.org/database/gdb/model/associationORM
改進時間自動更新特性增加自定義時間欄位: https://goframe.org/database/gdb/model/auto-timeCurrent
及Next
方法: https://goframe.org/errors/gerror/indexnet
ghttp
Client
Request
ParseQuery
, ParseForm
方法,用於解析指定類型的參數,並綁定到給定的對象。GetHeader
方法,用於獲取指定Header
參數。GetRemoteIp
方法,用於獲取請求客戶端 IP 。在 IP 白名單限制時應當使用GetRemoteIp
而不是GetClientIp
進行判斷,後者可以通過Header
偽造。ReloadParam
方法,往往用在中間件處理中,當中間件修改了請求參數,需要通過調用該方法重新解析一下請求參數。GetRouterMap
方法,用於獲得所有的路由參數返回為map
。Response
Output
方法名稱改為Flush
,用於將緩衝區的數據寫入到客戶端數據流中。Server
Cookie
SetHttpCookie
方法,用於根據標準庫http.Cookie
對象設置Cookie
。database
gdb
gredis
container
gvar
Scan
及ScanDeep
方法,用於struct
/slice
自動識別轉換。ListItemValues
及ListItemValuesUnique
方法,用於自動獲取list
中指定名稱的鍵值或屬性值,構成slice
返回。MapStrAny
接口實現方法。os
gcache
GetVar
方法,用於獲取緩存數據並返回為泛型對象。Update
方法,用於僅修改緩存數值,不修改緩存過期時間。UpdateExpire
方法,用於僅修改緩存過期時間,不修改緩存數值。Redis
適配器支持。其中內存適配器默認核心模塊提供,Redis
適配器由社區模塊提供: https://goframe.org/os/gcache/adaptererror
參數返回,升級時請注意查看。編譯時將不會通過。gfile
ScanDirFileFunc
方法,用於自定義函數處理的遞歸目錄文件遍歷。Scan*
方法,增加遞歸層級限制,默認層級限制為100000
.gfsnotify
Watcher
對象創建,調整為運行時按需創建,並且增加了並發安全控制。grpool
AddWithRecover
方法,用於添加異步任務時給定一個recover
處理方法,當任務panic
時交由該recover
方法處理,防止異步任務panic
引起整個進程崩潰。這裡解決的痛點是
recover
只能捕獲到當前goroutine
的panic
,因此只能在創建異步任務的時候指定recover
處理方法。
gtime
ParseDuration
方法,增加了對時間單位d
的支持,表示天。New
方法,支持通過字符串、時間戳、time.Time
對象創建gtime.Time
對象,https://goframe.org/os/gtime/timeAdd/AddStr/ToLocation/ToZone/UTCLocal/AddDate/Truncate/Round
方法,這些方法調用時,不再修改當前對象本身,而是創建並返回一個新的gtine.Time
對象,以便保證和標準庫time.Time
的邏輯一致,防止混淆。gtimer
gfcache
debug
gdebug
GoroutineId
方法,用於獲取當前執行的goroutine id
,僅作調試使用。encoding
gjson
GetScan/GetScanDeep
方法。ToScan/ToScanDeep
方法。LoadContentType
方法,用於根據指定類型的內容創建Json
操作對象。IsValidDataType
方法,用於判斷給定的數據類型是否支持解析。gcompress
GzipFile/UnGzipFile
基於gzip
壓縮算法的文件壓縮 /解壓。i18n
gi18n
text
gstr
SnakeFirstUpperCase
方法,用於在字母大寫前增加連接符,並不會處理數字,例如:SnakeFirstUpperCase("RGBCodeMd5")
將會返回rgb_code_md5
。util
gconv
Scan/ScanDeep
方法,用於自動識別轉換Struct/[]Struct
。MapDeep
方法的層級遞歸處理。gutil
ListItemValues
及ListItemValuesUnique
方法,用於自動獲取list
中指定名稱的鍵值或屬性值,構成slice
返回。ItemValue
方法,用於獲取指定map/*map/struct/*struct
類型的鍵值 /屬性值。MapOmitEmpty
方法,用於過濾map
中的空值。SliceDelete
方法,用於數組項刪除。Try
方法,通過閉包執行給定的方法,如果方法產生panic
則該方法返回error
,否則返回nil
。TryCatch(try func(), catch ...func(exception interface{}))
為TryCatch(try func(), catch ...func(exception error))
gvalid
error
gerror
garray
模塊的Unique
方法問題。glog
中定時器懶初始化時的goroutine
洩露問題。gstr
中名稱Case
轉換相關方法在名稱中帶有數字+特殊字符時的名稱轉換問題。ghttp
模塊中的CORS
跨域設置Header
細節問題。