從 v1.12 升級到 v1.13
令人興奮的新功能 🎉
功能增強 🚀
- Go 默認版本升級為 1.20
- 任務調度支持橫向伸縮
- 新增 debug 方法
- make:controller 命令新增參數
- Response 新增 Status 方法
- Orm 新增 Sum 和 Cursor 方法
- Route 模組支持配置驅動
- Request 新增 InputArray 和 InputMap 方法
- Orm 模型支持自定義連接
- Filesystem 模組新增 Cloudinary 驅動
- Log 新增鏈式方法
v1.13.4
破壞性變化 🛠
- 移除默認加載的 HTTP 全局中間件
- 優化 Controller 返回
- 修改 facades.Route() 中 Group 方法的入參
- 優化 facades.Cache() 中 Remember 與 RememberForever 方法(如果用到)
- 修改 access.NewAllowResponse 與 access.NewDenyResponse 包名(如果用到)
- 移除廢棄方法(如果用到)
錯誤修復 🐛
v1.13.2
- 修復 facades.Storage().Url() 在 windows 系統下路徑錯誤的問題
- 修復 Postgres 密碼為空時連接異常的問題
- 修復使用 Orm Cursor 方法時 With 方法無效的問題
v1.13.4
- 修復 validation 無法驗證路由參數的問題
- 修復 Fiber 驅動無法返回文件的問題
- 修復 Fiber 驅動全局中間件 panic 的問題
- 修復 Fiber 驅動的 ContentType 設置與 Gin 驅動不同的問題
v1.13.5
v1.13.6 v1.13.7
v1.13.8
- 修復使用不同 Guard 多次調用 facades.Auth().Parse() 數據被覆蓋的問題
- 修復使用 facades.Orm().WithContext() 設置 ctx 無法被正確傳達到 event.Context() 的問題
- 優化隊列日誌根據 APP_DEBUG 設置顯示
v1.13.9
v1.13.10
升級指南
請根據本節內容,一步步進行框架升級。
預估升級時間:10 分鐘
1. 更新依賴
在 go.mod
中更新依賴:
go get -u github.com/goravel/framework@v1.13.9 && go get -u github.com/goravel/gin
2. 新增文件
database/seeders/database_seeder.go
app/providers/database_service_provider.go
3. 註冊新的 Provider
注意順序:
import (
"github.com/goravel/framework/testing"
"github.com/goravel/gin"
)
// config/app.go
"providers": []foundation.ServiceProvider{
...
&validation.ServiceProvider{},
// New
&testing.ServiceProvider{},
&providers.AppServiceProvider{},
...
&providers.ValidationServiceProvider{},
// New
&providers.DatabaseServiceProvider{},
// New
&gin.ServiceProvider{},
}
4. 新增配置
import (
"github.com/goravel/framework/contracts/route"
"github.com/goravel/framework/facades"
ginfacades "github.com/goravel/gin/facades"
)
config.Add("http", map[string]any{
// HTTP Driver
"default": "gin",
// HTTP Drivers
"drivers": map[string]any{
"gin": map[string]any{
"route": func() (route.Route, error) {
return ginfacades.Route("gin"), nil
},
},
},
...
}
config.Add("cors", map[string]any{
...
// New
"paths": []string{"*"},
"allowed_methods": []string{"*"},
...
}
5. 移除默認加載的 HTTP 全局中間件
tls
與cors
中間件已集成至默認 HTTP 驅動中,因此app/http/kernel.go
文件中的middleware.Cors()
與middleware.Tls()
需被移除。app/providers/route_service_provider.go
文件中facades.Route().GlobalMiddleware(http.Kernel{}.Middleware()...)
方法從Register
移動至Boot
:
package providers
...
type RouteServiceProvider struct {
}
func (receiver *RouteServiceProvider) Register(app foundation.Application) {
}
func (receiver *RouteServiceProvider) Boot(app foundation.Application) {
//Add HTTP middleware
facades.Route().GlobalMiddleware(http.Kernel{}.Middleware()...)
receiver.configureRateLimiting()
routes.Web()
}
func (receiver *RouteServiceProvider) configureRateLimiting() {
}
6. 優化 Controller 返回
Controller
增加返回值 http.Response
,ctx.Response()
可直接返回,不需要再單獨 return
,使邏輯更加流暢:
// Before
func (r *UserController) Show(ctx http.Context) {
ctx.Response().Success().Json(http.Json{
"Hello": "Goravel",
})
return
}
// After
func (r *UserController) Show(ctx http.Context) http.Response {
return ctx.Response().Success().Json(http.Json{
"Hello": "Goravel",
})
}
7. 修改 facades.Route() 中 Group 方法的入參
route.Route
修改為 route.Router
:
// Before
facades.Route().Group(func(route route.Route)
// After
facades.Route().Group(func(route route.Router)
8. 優化 facades.Cache() 中的 Remember 和 RememberForever 方法(如果使用)
callback
的類型從 func() any
改為 func() (any, error)
:
// Before
Remember(key string, ttl time.Duration, callback func() any) (any, error)
RememberForever(key string, callback func() any) (any, error)
// After
Remember(key string, ttl time.Duration, callback func() (any, error)) (any, error)
RememberForever(key string, callback func() (any, error)) (any, error)
9. 修改 access.NewAllowResponse 與 access.NewDenyResponse 包名(如果用到)
由 /contracts/auth/access
修改為 /auth/access
:
// Before
import "github.com/goravel/framework/contracts/auth/access"
access.NewAllowResponse()
access.NewDenyResponse()
// After
import "github.com/goravel/framework/auth/access"
access.NewAllowResponse()
access.NewDenyResponse()
10. 移除廢棄方法(如果用到)
移除
ctx.Request().Form()
和ctx.Request().Json()
方法,使用ctx.Request().Input()
方法替代;移除
Log
自定義驅動的GetLevel
,GetTime
,GetMessage
方法,使用Level
,Time
,Message
方法替代;移除
gorm.New
方法,該方法用於直接獲取gorm
實例,已不推薦使用。 如有必要,請使用gorm.NewGormImpl
方法替代; 如果必要,請使用gorm.NewGormImpl
方法替代;
功能介紹
與資料庫中繼資料有關
版本: v1.13.1
模型工廠
版本: v1.13.1
集成測試
版本: v1.13.1
檢視
版本: v1.13.1
Go 默認版本升級為 1.20
版本: v1.13.1
go 1.18 和 1.19 已停止維護,框架相應升級到 1.20,查看詳情。 如果想繼續使用 1.18 或 1.19,只需修改 go.mod
中的版本號,它們目前是完全兼容的。
任務調度支持橫向擴展
版本: v1.13.1
新增 debug 方法
版本: v1.13.1
make:controller 命令新增參數
版本: v1.13.1
make:controller
命令新增 --resource
參數,可以便捷的生成 CURD 結構:
go run . artisan make:controller --resource UserController
Response 新增 Status 方法
版本: v1.13.1
Orm 新增 Sum 和 Cursor 方法
版本: v1.13.1
Route 模塊支持配置驅動
版本: v1.13.1
將 Route 模塊原默認驅動 Gin 獨立成包,通過配置的方式注入到 Goravel 中。 本次優化後,為其他 HTTP 包注入到 Goravel 提供了便捷的通道,目前官方支持兩個 HTTP 包: 優化後,提供了一個便捷的通道來將其他 HTTP 包注入 Goravel,目前官方支持兩個 HTTP 包:
驅動 | 鏈接 |
---|---|
Gin | https://github.com/goravel/gin |
Fiber | https://github.com/goravel/fiber |
Request 新增 InputArray 和 InputMap 方法
版本: v1.13.1
Orm 模型支持自定義連接
版本: v1.13.1
Filesystem 模塊新增 Cloudinary 驅動
版本: v1.13.1
Log 新增鏈式方法
版本: v1.13.1
修復 facades.Auth().User() 的問題
版本: v1.13.1
修復使用
facades.Auth().User(ctx, &user)
方法時,如果user
不存在不拋出錯誤的問題。修復當主鍵非
int
類型時,無法找到user
的問題;
修復自定義 .env 路由某些情況下不生效的問題
版本: v1.13.1
修復自定義.env路徑在某些情況下不會生效的問題。
修復 JWT 中設置 ttl == 0 時 token 立即過期的問題
版本: v1.13.1
預期當 ttl == 0
時,token 永不會過期。
修復 facades.Storage().Url() 在 windows 系統下路徑錯誤的問題
版本: v1.13.2
修復 Postgres 密碼為空時連接異常的問題
版本: v1.13.2
修復使用 Orm Cursor 方法時 With 方法無效的問題
版本: v1.13.2
服務啟動支持環境變量
版本: v1.13.4
修復 validation 無法校驗路由參數的問題
goravel/gin: v1.1.6
goravel/fiber: v1.1.11
修復 Fiber 驅動無法返回文件的問題
goravel/fiber: v1.1.11
修復 Fiber 驅動全局中間件 panic 的問題
goravel/fiber: v1.1.11
修復 Fiber 驅動的 ContentType 設置與 Gin 驅動不同的問題
goravel/fiber: v1.1.11
修復模型自定義連接不生效
goravel/framework: v1.13.5
修復 Mock Log 報錯
goravel/framework: v1.13.5
修復隊列任務鏈非線性執行的問題
goravel/framework: v1.13.6 v1.13.7
修復使用不同 Guard 多次調用 facades.Auth().Parse() 數據被覆蓋的問題
goravel/framework: v1.13.8
修復使用 facades.Orm().WithContext() 設置 ctx 無法被正確傳遞到 event.Context() 的問題
goravel/framework: v1.13.8
優化隊列日誌根據 APP_DEBUG 設置顯示
goravel/framework: v1.13.8
Debug
和 Info
級別將不會在 APP_DEBUG=false
時打印。
修復 Log 換行錯誤的問題
goravel/framework: v1.13.9
修復 vendor:publish 命令無法發布多層文件夾的問題
goravel/framework: v1.13.9
修復 Log 中 traces 錯誤的問題
goravel/framework: v1.13.10
修復 orm event 中 GetAttribute 方法返回數據錯誤的問題
goravel/framework: v1.13.10
ORM 新增 ToSql, ToRawSql 方法
goravel/framework: v1.13.10