@@ -7,31 +7,35 @@ import (
77 "time"
88
99 "github.com/gin-gonic/gin"
10+
1011 "github.com/leetcode-golang-classroom/golang-rest-api-sample/interanl/config"
1112 "github.com/leetcode-golang-classroom/golang-rest-api-sample/interanl/logger"
1213)
1314
14- // define app dependency
15+ // App define app dependency.
1516type App struct {
1617 Router * gin.Engine
17- config * config.Config
18+ cfg * config.Config
1819}
1920
20- func New (config * config.Config , ctx context.Context ) * App {
21+ // New - app constructor.
22+ func New (ctx context.Context , cfg * config.Config ) * App {
2123 app := & App {
22- config : config ,
24+ cfg : cfg ,
2325 }
2426 app .SetupRoutes (ctx )
2527 return app
2628}
2729
30+ // Start - app 啟動.
2831func (app * App ) Start (ctx context.Context ) error {
29- logger := logger .FromContext (ctx )
32+ log := logger .FromContext (ctx )
3033 server := & http.Server {
31- Addr : fmt .Sprintf (":%s" , app .config .Port ),
32- Handler : app .Router ,
34+ Addr : fmt .Sprintf (":%s" , app .cfg .Port ),
35+ Handler : app .Router ,
36+ ReadHeaderTimeout : time .Minute ,
3337 }
34- logger .Info (fmt .Sprintf ("Starting server on %s" , app .config .Port ))
38+ log .Info (fmt .Sprintf ("Starting server on %s" , app .cfg .Port ))
3539 errCh := make (chan error , 1 )
3640 go func () {
3741 err := server .ListenAndServe ()
@@ -45,9 +49,13 @@ func (app *App) Start(ctx context.Context) error {
4549 case err := <- errCh :
4650 return err
4751 case <- ctx .Done ():
48- logger .Info ("server cancel" )
49- timeout , cancel := context .WithTimeout (context . Background () , time .Second * 10 )
52+ log .Info ("server cancel" )
53+ timeout , cancel := context .WithTimeout (ctx , time .Second * 10 )
5054 defer cancel ()
51- return server .Shutdown (timeout )
55+ err := server .Shutdown (timeout )
56+ if err != nil {
57+ return fmt .Errorf ("%w" , err )
58+ }
59+ return nil
5260 }
5361}
0 commit comments