From 8d015aa3e77f108c044254923055d3209aa6bf3a Mon Sep 17 00:00:00 2001 From: yumaojun03 <719118794@qq.com> Date: Sun, 15 Dec 2024 15:57:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85DI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework/README.md | 3 +- vblog/README.md | 56 +++++++++++++++++++++++++++++++++-- vblog/apps/token/impl/impl.go | 6 ++++ vblog/etc/application.toml | 5 +++- vblog/logs/vblog.log | 21 +++++++++++++ 5 files changed, 86 insertions(+), 5 deletions(-) diff --git a/homework/README.md b/homework/README.md index 903fbc3..18debc3 100644 --- a/homework/README.md +++ b/homework/README.md @@ -23,4 +23,5 @@ Web全栈开发(Book Api): 必须完成 - 文松 [vblog](https://gitlab.com/lws-go) day01: book restful api + config 包 的版本, 跑起来能验证成功 -day02: book mvc 版本是必须要写出来(log 包允许你copy), mcube的版本是体验, mcube版本不做要求 \ No newline at end of file +day02: book mvc 版本是必须要写出来(log 包允许你copy), mcube的版本是体验, mcube版本不做要求 +day05: 自己使用map这种数据结果 做一个 轻量级的ioc框架 \ No newline at end of file diff --git a/vblog/README.md b/vblog/README.md index 71c0b06..0d472ac 100644 --- a/vblog/README.md +++ b/vblog/README.md @@ -449,7 +449,6 @@ curl --location 'http://127.0.0.1:8080/api/vblog/v1/tokens' \ ## 其他的优化 - ### Make ```makefile @@ -486,11 +485,62 @@ help: ## Display this help screen 1. 颁发Token是不是要 Set-Cookie ```go - // 设置Cookie - ctx.SetCookie(token.COOKIE_NAME, ins.AccessToken, ins.AccessTokenExpireTTL(), "/", application.Get().Domain(), false, true) +// 设置Cookie +ctx.SetCookie(token.COOKIE_NAME, ins.AccessToken, ins.AccessTokenExpireTTL(), "/", application.Get().Domain(), false, true) ``` 2. 获取Token是不是也需要Cookie当作获取Token +```go +// 再尝试从cookie中获取 +if accessToken == "" { + tc, err := c.Cookie(token.COOKIE_NAME) + if err != nil { + log.L().Error().Msgf("get cookie error, %s", err) + } else { + accessToken = tc + } +} +``` + +### 优雅关闭 + +```go +// 优雅关闭HTTP服务 +if err := h.server.Shutdown(ctx); err != nil { + return fmt.Errorf("http graceful shutdown timeout, force exit") +} +``` + +### DI: 依赖注入 + +通过配置 ---> 获取一个对象,直接使用 + ++ 注入工具:https://www.mcube.top/docs/framework/component/mysql/ ++ 为你程序注入配置: + +```toml +[token] + default_expired_ttl = 3600 +``` + +```go +// 定义一个struct, 用于实现 UserService就是刚才定义的接口 +// 怎么才能判断这个结构体没有实现这个接口 +// unmashal TokenServiceImpl <---> Config文件 +type TokenServiceImpl struct { + ioc.ObjectImpl + + // user service + user user.AdminService + + // 如果你控制器有一些配置 + DefaultExpiredTTL int `json:"default_expired_ttl" yaml:"default_expired_ttl" toml:"default_expired_ttl" env:"DEFAULT_EXPIRED_TTL"` +} + +func (*TokenServiceImpl) Name() string { + return token.AppName +} +``` \ No newline at end of file diff --git a/vblog/apps/token/impl/impl.go b/vblog/apps/token/impl/impl.go index 4a58f4c..7a44cec 100644 --- a/vblog/apps/token/impl/impl.go +++ b/vblog/apps/token/impl/impl.go @@ -7,6 +7,7 @@ import ( "github.com/infraboard/mcube/v2/exception" "github.com/infraboard/mcube/v2/ioc" "github.com/infraboard/mcube/v2/ioc/config/datasource" + "github.com/infraboard/mcube/v2/ioc/config/log" "gitlab.com/go-course-project/go17/vblog/apps/token" "gitlab.com/go-course-project/go17/vblog/apps/user" ) @@ -22,6 +23,9 @@ type TokenServiceImpl struct { // user service user user.AdminService + + // 如果你控制器有一些配置 + DefaultExpiredTTL int `json:"default_expired_ttl" yaml:"default_expired_ttl" toml:"default_expired_ttl" env:"DEFAULT_EXPIRED_TTL"` } func (*TokenServiceImpl) Name() string { @@ -31,6 +35,8 @@ func (*TokenServiceImpl) Name() string { // 他需要自己去获取依赖,通过ioc func (i *TokenServiceImpl) Init() error { i.user = user.GetService() + + log.L().Debug().Msgf("DefaultExpiredTTL: %d", i.DefaultExpiredTTL) return nil } diff --git a/vblog/etc/application.toml b/vblog/etc/application.toml index 1322c19..6e52559 100644 --- a/vblog/etc/application.toml +++ b/vblog/etc/application.toml @@ -28,4 +28,7 @@ [log.file] # 是否开启文件记录 - enable = true \ No newline at end of file + enable = true + +[token] + default_expired_ttl = 3600 \ No newline at end of file diff --git a/vblog/logs/vblog.log b/vblog/logs/vblog.log index 7973502..53ba539 100644 --- a/vblog/logs/vblog.log +++ b/vblog/logs/vblog.log @@ -141,3 +141,24 @@ {"level":"info","component":"http","time":"2024-12-15T15:10:29+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} {"level":"error","component":"http","time":"2024-12-15T15:10:29+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} {"level":"info","component":"server","time":"2024-12-15T15:10:29+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:41:14+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T15:41:15+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:41:15+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:41:15+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:41:15+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:41:15+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"info","component":"server","time":"2024-12-15T15:41:31+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:41:31+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"error","component":"http","time":"2024-12-15T15:41:31+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} +{"level":"info","component":"server","time":"2024-12-15T15:41:31+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:53:01+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"debug","time":"2024-12-15T15:53:01+08:00","caller":"token/impl/impl.go:39","message":"DefaultExpiredTTL: 3600"} +{"level":"info","component":"server","time":"2024-12-15T15:53:01+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:53:01+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:53:01+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:53:01+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:53:01+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"info","component":"server","time":"2024-12-15T15:55:34+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:55:34+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"error","component":"http","time":"2024-12-15T15:55:34+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} +{"level":"info","component":"server","time":"2024-12-15T15:55:34+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"}