GoFrame v1.14.1 強勢發布!模塊化、高性能、生產級的 Go 開發框架

2020-12-14 開源中國

GoFrame

GF(Go Frame)是一款模塊化、高性能、生產級的 Go 基礎開發框架。實現了比較完善的基礎設施建設以及開發工具鏈,提供了常用的基礎開發模塊,如:緩存、日誌、隊列、數組、集合、容器、定時器、命令行、內存鎖、對象池、配置管理、資源管理、數據校驗、數據編碼、定時任務、資料庫 ORM 、TCP/UDP 組件、進程管理 /通信等等。並提供了 Web 服務開發的系列核心組件,如:RouterCookieSessionMiddleware、服務註冊、模板引擎等等,支持熱重啟、熱更新、域名綁定、TLS/HTTPSRewrite等特性。

特點

  • 模塊化、鬆耦合設計;
  • 模塊豐富、開箱即用;
  • 簡便易用、易於維護;
  • 高代碼質量、高單元測試覆蓋率;
  • 社區活躍,大牛謙遜低調脾氣好;
  • 詳盡的開發文檔及示例;
  • 完善的本地中文化支持;
  • 設計為團隊及企業使用;

支持我們

OSC 最佳開源項目評選開始了,如果您喜歡GoFrame,歡迎為GoFrame投上您寶貴的一票🙏 https://www.oschina.net/p/goframe

Change Log

由於GoFrame是模塊化設計,因此每個版本的更新記錄都會以模塊的形式進行介紹。

重要更新:

  1. 將框架內所有的json操作從標準庫替換為json-iterator/go,提高操作效率。
  2. 緩存模塊重構底層設計,增加適配器設計模式,並增加內存及Redis適配器支持。其中內存適配器默認核心模塊提供,Redis適配器由社區模塊提供: https://goframe.org/os/gcache/adapter
  3. 增加可自定義的校驗規則註冊特性: https://goframe.org/util/gvalid/customrule
  4. Web Server增加所有配置項示例: https://goframe.org/net/ghttp/config/example
  5. ORM新增基於RedisSQL緩存適配器: https://goframe.org/database/gdb/model/cache
  6. ORM新增模型關聯實驗特性: https://goframe.org/database/gdb/model/association
  7. ORM改進時間自動更新特性增加自定義時間欄位: https://goframe.org/database/gdb/model/auto-time
  8. 錯誤處理模塊新增CurrentNext方法: https://goframe.org/errors/gerror/index

net

  1. ghttp
    • Client
    • Request
      • 增加ParseQueryParseForm方法,用於解析指定類型的參數,並綁定到給定的對象。
      • 增加GetHeader方法,用於獲取指定Header參數。
      • 增加GetRemoteIp方法,用於獲取請求客戶端 IP 。在 IP 白名單限制時應當使用GetRemoteIp而不是GetClientIp進行判斷,後者可以通過Header偽造。
      • 增加ReloadParam方法,往往用在中間件處理中,當中間件修改了請求參數,需要通過調用該方法重新解析一下請求參數。
      • 增加GetRouterMap方法,用於獲得所有的路由參數返回為map
    • Response
      • Output方法名稱改為Flush,用於將緩衝區的數據寫入到客戶端數據流中。
    • Server
    • Cookie
      • 增加SetHttpCookie方法,用於根據標準庫http.Cookie對象設置Cookie
      • 其他一些功能改進

database

  1. gdb

  2. gredis

container

  1. gvar
    • 增加ScanScanDeep方法,用於struct/slice自動識別轉換。
    • 增加ListItemValuesListItemValuesUnique方法,用於自動獲取list中指定名稱的鍵值或屬性值,構成slice返回。
    • 增加MapStrAny接口實現方法。

os

  1. gcache

    • 增加GetVar方法,用於獲取緩存數據並返回為泛型對象。
    • 增加Update方法,用於僅修改緩存數值,不修改緩存過期時間。
    • 增加UpdateExpire方法,用於僅修改緩存過期時間,不修改緩存數值。
    • 重構底層設計,增加適配器設計模式,並增加內存及Redis適配器支持。其中內存適配器默認核心模塊提供,Redis適配器由社區模塊提供: https://goframe.org/os/gcache/adapter
    • 注意,本次模塊的修改會有部分方法不兼容,部分方法增加了error參數返回,升級時請注意查看。編譯時將不會通過。
    • 其他一些功能改進。
  2. gfile

    • 增加ScanDirFileFunc方法,用於自定義函數處理的遞歸目錄文件遍歷。
    • 改進Scan*方法,增加遞歸層級限制,默認層級限制為100000.
  3. gfsnotify

    • 去掉模塊初始化時的Watcher對象創建,調整為運行時按需創建,並且增加了並發安全控制。
  4. grpool

    • 增加AddWithRecover方法,用於添加異步任務時給定一個recover處理方法,當任務panic時交由該recover方法處理,防止異步任務panic引起整個進程崩潰。

    這裡解決的痛點是recover只能捕獲到當前goroutinepanic,因此只能在創建異步任務的時候指定recover處理方法。

  5. gtime

    • 增加ParseDuration方法,增加了對時間單位d的支持,表示天。
    • 改進New方法,支持通過字符串、時間戳、time.Time對象創建gtime.Time對象,https://goframe.org/os/gtime/time
    • 改進Add/AddStr/ToLocation/ToZone/UTCLocal/AddDate/Truncate/Round方法,這些方法調用時,不再修改當前對象本身,而是創建並返回一個新的gtine.Time對象,以便保證和標準庫time.Time的邏輯一致,防止混淆。
    • 其他一些細節改進。
  6. gtimer

  7. gfcache

debug

  1. gdebug
    • 新增GoroutineId方法,用於獲取當前執行的goroutine id,僅作調試使用。

encoding

  1. gjson

    • 新增GetScan/GetScanDeep方法。
    • 新增ToScan/ToScanDeep方法。
    • 新增LoadContentType方法,用於根據指定類型的內容創建Json操作對象。
    • 新增IsValidDataType方法,用於判斷給定的數據類型是否支持解析。
    • 其他一些改進。
    • 單元測試完善。
  2. gcompress

    • 新增GzipFile/UnGzipFile基於gzip壓縮算法的文件壓縮 /解壓。

i18n

  1. gi18n

text

  1. gstr
    • 增加SnakeFirstUpperCase方法,用於在字母大寫前增加連接符,並不會處理數字,例如:SnakeFirstUpperCase("RGBCodeMd5")將會返回rgb_code_md5

util

  1. gconv

    • 增加對指針基本類型的轉換支持。
    • 增加Scan/ScanDeep方法,用於自動識別轉換Struct/[]Struct
    • 改進MapDeep方法的層級遞歸處理。
    • 其他一些細節改進,性能改進。
  2. gutil

    • 增加ListItemValuesListItemValuesUnique方法,用於自動獲取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))
  3. gvalid

error

  1. gerror

Bug Fix

  1. 修復garray模塊的Unique方法問題。
  2. 修復glog中定時器懶初始化時的goroutine洩露問題。
  3. 修復gstr中名稱Case轉換相關方法在名稱中帶有數字+特殊字符時的名稱轉換問題。
  4. 修復ghttp模塊中的CORS跨域設置Header細節問題。
  5. 其他 BUG 修復: https://github.com/gogf/gf/issues?q=is%3Aissue+label%3Abug+is%3Aclosed

相關焦點