@@ -7,31 +7,35 @@ import (
7
7
"time"
8
8
9
9
"github.com/gin-gonic/gin"
10
+
10
11
"github.com/leetcode-golang-classroom/golang-rest-api-sample/interanl/config"
11
12
"github.com/leetcode-golang-classroom/golang-rest-api-sample/interanl/logger"
12
13
)
13
14
14
- // define app dependency
15
+ // App define app dependency.
15
16
type App struct {
16
17
Router * gin.Engine
17
- config * config.Config
18
+ cfg * config.Config
18
19
}
19
20
20
- func New (config * config.Config , ctx context.Context ) * App {
21
+ // New - app constructor.
22
+ func New (ctx context.Context , cfg * config.Config ) * App {
21
23
app := & App {
22
- config : config ,
24
+ cfg : cfg ,
23
25
}
24
26
app .SetupRoutes (ctx )
25
27
return app
26
28
}
27
29
30
+ // Start - app 啟動.
28
31
func (app * App ) Start (ctx context.Context ) error {
29
- logger := logger .FromContext (ctx )
32
+ log := logger .FromContext (ctx )
30
33
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 ,
33
37
}
34
- logger .Info (fmt .Sprintf ("Starting server on %s" , app .config .Port ))
38
+ log .Info (fmt .Sprintf ("Starting server on %s" , app .cfg .Port ))
35
39
errCh := make (chan error , 1 )
36
40
go func () {
37
41
err := server .ListenAndServe ()
@@ -45,9 +49,13 @@ func (app *App) Start(ctx context.Context) error {
45
49
case err := <- errCh :
46
50
return err
47
51
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 )
50
54
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
52
60
}
53
61
}
0 commit comments