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中的参数,他们是相互影响的。
Gin框架入门的更多相关文章
- GO语言GIN框架入门
Gin框架介绍 Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 中文文档 Gin框架安装与使用 ...
- Go最火的Gin框架简单入门
Gin 介绍 Gin 是一个 Golang 写的 web 框架,具有高性能的优点,,基于 httprouter,它提供了类似martini但更好性能(路由性能约快40倍)的API服务.官方地址:htt ...
- 01 . Go框架之Gin框架从入门到熟悉(路由和上传文件)
Gin框架简介 Gin是使用Go/Golang语言实现的HTTP Web框架, 接口简洁, 性能极高,截止1.4.0版本,包含测试代码,仅14K, 其中测试代码9K, 也就是说测试源码仅5k左右, 具 ...
- gin框架教程一: go框架gin的基本使用
我们在用http的时候一般都会用一些web框架来进行开发,gin就是这样的一个框架,它有哪些特点呢 一:gin特点 1.性能优秀2.基于官方的net/http的有限封装3.方便 灵活的中间件4.数据绑 ...
- 在gin框架中使用JWT
在gin框架中使用JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. 什么 ...
- GoWeb之gin框架
Gin 是一个 go 写的 web 框架,具有高性能的优点.官方地址:https://github.com/gin-gonic/gin 一.快速上手 安装 go mod init go get -u ...
- 一步一步分析Gin框架路由源码及radix tree基数树
Gin 简介 Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much ...
- CI框架入门1
CI框架入门: 1.url的特点 2.目录结构/布局 3.MVC分别在哪里,如何依葫芦画瓢 4.安全性 ...
- 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...
- 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战
前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...
随机推荐
- [转帖]Kafka—配置SASL/PLAIN认证客户端及常用命令
https://www.jianshu.com/p/c1a02fb1779f 介绍 SASL/PLAIN 是一种简单的 username/password安全认证机制,本文主要总结服务端开启该认证 ...
- [转帖]Kdump配置及使用(详细)总结(二)
一.简介 本文主要介绍如何打开Kdump并对其相关文件进行配置.前面章节已经对Kdump调试机理进行总结总结,具体可以点击下面链接: Kdump调试机理总结(一) crash工具分析vmcore文件常 ...
- 【转帖】Linux创建软连接出现的错误及解决方法
问题: 创建软连接以后,使用cd 软连接路径显示没有那个文件或目录. 创建过程及切换结果,如图: 原因: 路径一定要写成绝对路径!!! 解决办法: 了解创建软连接的命令: ln -s 源文件 目标文件 ...
- [转帖]拜托!面试请不要再问我Spring Cloud底层原理
https://www.cnblogs.com/jajian/p/9973555.html 概述# 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大 ...
- [转帖]Linux使用Stress-ng测试CPU、内存、磁盘I/O满载情况教程与范例
https://www.xiaoyuanjiu.com/108301.html 介绍如何在 Linux 系统上使用 stress-ng 负载测试工具,产生 CPU.内存等资源满载的状况. stress ...
- Redis数据倾斜与JD开源hotkey源码分析揭秘
1 前言 之前旁边的小伙伴问我热点数据相关问题,在给他粗略地讲解一波redis数据倾斜的案例之后,自己也顺道回顾了一些关于热点数据处理的方法论,同时也想起去年所学习JD开源项目hotkey--专门用来 ...
- 【我在京东做研发】揭秘支撑京东万人规模技术人员协作的行云DevOps平台
分享人:孙长虹 京东云DevOps解决方案架构师 复旦大学计算机系毕业,并拥有人民大学心理学硕士学位.曾任职于Alcatel-Lucent,IBM和惠普,具有丰富的大型复杂产品研发及项目管理经验,擅长 ...
- vscode推荐插件
js相关的插件 JavaScript (ES6) code snippets Babel ES6/ES7 html css 汉化 Chinese (Simplified) (简体中文) Languag ...
- ABP vNext系列文章01---模块化
一.模块化应用 1.继承AbpModule 每个模块都应该定义一个模块类.定义模块类的最简单方法是创建一个派生自AbpModule的类,如下所示: 2.配置依赖注入和其他模块---ConfigSe ...
- 解决Chrome翻译无法使用
截止2022年11月3日自己ping出的ip不可用了 可以用以下ip 172.217.215.90 172.253.115.90 142.250.126.90 142.250.10.90 142.25 ...