公众号:程序员读书,欢迎关注
安装好Gin
框架之后,要如何启动或运行Gin
框架呢?简单来说分两步:
- 创建
gin.Engine
实例 - 调用
gin.Engine
的Run()
开始监听某个端口,接收请求。
那么如何创建一个gin.Engine
实例呢?有两种方式:
- 调用
gin.New()
函数返回一个gin.Engine
实例。 - 调用
gin.Default()
函数返回一个gin.Engine
实例。
以上两种创建方式有什么不同呢?下面我们来仔细探究一下。
创建gin.Engine实例
调用gin.New()
方法或者gin.Default()
都会返回一个gin.Engline
实例:
go
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
//使用New()函数创建Engine实例
engine := gin.New()
//engine := gin.Default()
engine.Run()
}
那么这两个函数创建的gin.Engine
实例有什么不同呢?
使用gin.Default()
函数创建的gin.Engine
默认会带上日志(gin.Logger()
)和崩溃捕捉(gin.Recovery()
)这两个中间件,而gin.New()
创建的则没有,因此下面的代码是等价的:
css
engine := gin.Default()
//相当于下面的语句
engine := gin.New()
engine.Use(gin.Logger(),gin.Recovery())
有关中间件的知识,我们后续文章再介绍!
启动服务器
创建好gin.Engine
实例后,调用该实例的Run()
方法就可以启动服务器了,在上面的示例中,我们调用Run()
方法并没有传递参数,该方法可以接收一个端口号作为参数:
arduino
engine.Run(":3000")
如果没有传端口号,服务器默认在
8080
端号启动。
实际上,gin.Engine
结构体实现了http.Handler
接口:
go
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
因此可以与net/http
库配合使用:
css
func main() {
engine := gin.Default()
http.ListenAndServe(":8080", engine)
}
当我们想更好地配置HTTP
相关参数时,与net/http
库配合使用是一种更好的选择:
css
func main() {
engine := gin.Default()
s := &http.Server{
Addr: ":3000",
Handler: engine,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
s.ListenAndServe()
}
小结
只是把服务器启动起来,服务器还不能接收请求,还差什么呢?答案是路由,我们在下一篇文章中再来探究。