Gin框架入门

参考文档

Gin:   https://gin-gonic.com/zh-cn/docs/quickstart/
net/http: https://pkg.go.dev/net/http

代码分析

package main

import (
	"fmt"
        "time"  // 时间包
	"net/http"  // 提供了HTTP客户端和服务端的实现

	"github.com/gin-gonic/gin"  // gin框架
)

func main() {
        // 返回Gin的`type Engine struct{}`,里面包含RouterGroup,
        // 相当于创建一个路由Handlers, 可以后期绑定各类的路由规则和函数/中间件等
	router := gin.Default()
        
        // 创建不同的HTTP方法绑定到Handlers中,支持POST/PUT等常用Restful方法
        // gin.Context: Context是gin中的上下文,允许我们在中间件之间传递变量
        // 管理流、验证JSON请求、响应json请求等,在gin中包含大量Context的方法
        // 例如常用的DefaultQuery、Query、DefaultPostForm、PostForm等
	router.GET("/test", func(c *gin.Context) {
                // 响应json格式类型
                // gin.H{}就是一个map[string]interface{}
		c.JSON(200, gin.H{
			"message": "test",
		})
	})

	s := &http.Server{
		Addr:           ":8080",
		Handler:        router,
		ReadTimeout:    60 * time.Second,
		WriteTimeout:   60 * time.Second,
		MaxHeaderBytes: 1 << 20,
	}
	s.ListenAndServe()
}

&http.Server 和 ListenAndServe

# http.Server
type Server struct {
	Addr string  //监听的TCP地址,格式为:8000

	Handler Handler  // http句柄,实质为ServeHTTP,用于处理程序响应HTTP请求

	TLSConfig *tls.Config // 安全传输层协议(TLS)配置

	ReadTimeout time.Duration // 允许读取的最大时间

	ReadHeaderTimeout time.Duration // 允许读取请求头的最大时间

	WriteTimeout time.Duration // 允许写入的最大时间

	IdleTimeout time.Duration // 等待的最大时间

	MaxHeaderBytes int // 请求头的最大字节数

	ConnState func(net.Conn, ConnState) // 指定一个可选的回调函数,当客户端连接时发生变化时调用

	ErrorLog *log.Logger //指定一个可选的日志记录器
        ...
}


# ListenAndServe
func (srv *Server) ListenAndServe() error {
	if srv.shuttingDown() {
		return ErrServerClosed
	}
	addr := srv.Addr
	if addr == "" {
		addr = ":http"
	}
	ln, err := net.Listen("tcp", addr)
	if err != nil {
		return err
	}
	return srv.Serve(ln)
}
开启监听服务,监听TCP网络地址,Addr和调用调用应用程序处理连接上的请求
我们在源码中看到Addr是调用我们在&http.Server中设置的参数,因此我们在
设置时要用&,我们要改变参数的值,因为我们ListenAndServe和其他一些方法
需要用到&http.Server中的参数,他们是相互影响的。
上一篇:人工智能和物联网-5个不断发展的用例


下一篇:2021年,我们不断收获AI带来的意外之喜