点,可以得到struct /map里的值

curl -X GET http://127.0.0.1:8080/api/hello
#出事换环境
https://beego.gocn.vip/beego/zh/developing/bee/env.html
#go语言安装主根目录
export GOROOT=/usr/local/go
#替换你的目录#GOPATH 是自己的go项目路径,自定义设置export GOPATH=/Users/ding/go_workspace #替换你的目录#GOBIN 当我们使用go install命令编译后并且安装的二进制程序目录export GOBIN=$GOPATH/bin# 启用 Go Modules 功能export GO111MODULE=on# 配置 GOPROXY 环境变量。你可以换成你喜欢的 proxyexport GOPROXY=https://goproxy.cn,direct# 加入环境变量中export PATH=$PATH:$GOROOT/bin:$GOBIN
# 创建文件夹
mkdir -p $GOPAH/src/github.com/rupid/learn-gin
# 进入learn-gin文件夹
cd $_
# 初始化mod
go mod init
# 拉去gin的模块
go get -v github.com/gin-gonic/gin@v1.7
待了解的前置知识:
- go基本语法
- go写成基本知识
开发工具
- goland
老师是在liunx下教学的,windows的命令行更改如下
mkdir -p $GOPATH/src/github.com/e421083458/gin_test_project 换成 mkdir -p $env:GOPATH/src/github.com/e421083458/gin_test_project
export GO111MODULE=on 换成 go env -w GO111MODULE=on
这个on不能是大写,而且只有on,off,auto
如果设置错了值,可以看这篇文章
windows错误设置GO111MODULE报错解决
设置好GO111MODULE之后,可以设置代理,下载速度会快一点
go env -w GOPROXY=https://goproxy.cn,direct

自动申请证书
autotls.Run(r, "域名")
流程:
1、生成本地密钥
2、发送密钥到证书颁发机构 => 获取私钥
3、私钥验证,验证后保存,下次请求用私钥加密 => 自动下载证书

1、加载模板文件
r.LoadHTMLGlob("template/*")2、处理模板数据
c.HTML(200, "index.html", gin.H{
"title": "test_gin_template"
})

package mainimport ( "context"
"github.com/gin-gonic/gin"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time")func main() {
r := gin.Default()
r.GET("/other_shutdown", func(c *gin.Context) {
time.Sleep(10*time.Second)
c.String(200, "test other shutdown")
})
srv := &http.Server{
Addr: ":8085",
Handler: r,
} go func() { if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen:%s\n", err)
}
}()
quit := make(chan os.Signal)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("shutdown server...")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil {
log.Fatal("server shutdown:", err)
}
log.Println("server exiting")
}1、时间库使用
time.Sleep(10*time.Second) // 表示等待10秒
2、使用http.Server 构建server
srv := &http.Server{
// 地址
Addr: ":8085",
Handler: r,
}3、goroutine创建协程并使用
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
}
}()4、信号 os.Signal - 请求拦截
quit := make(chan os.Signal) // 捕获 ctrl+c 和 kill -15 终止两类, kill -9捕获不到 signal.Notify(quit, syscall.S IGINT, syscall.SIGTERM) // 阻塞channel <-quit
5、设置超时的上下文
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
6、defer
7、执行关闭服务器
srv.Shutdown(ctx)
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func IPAuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
ipList := []string{
"127.0.0.2",
}
flag := false
clientIP := c.ClientIP()
for _, ip := range ipList {
if ip == clientIP {
flag = true
break
}
}
if !flag {
c.String(http.StatusUnauthorized, "%s not in ip list", clientIP)
c.Abort()
}
}
}
func main() {
r := gin.Default()
r.Use(IPAuthMiddleware())
r.GET("whitelist_middleware_gin", func(c *gin.Context) {
c.String(200, c.ClientIP())
})
err := r.Run()
if err != nil {
fmt.Println(err)
}
}1、ip数组初始化:
ipList := []string{
"127.0.0.2",
}2、获取客户端ip
c.ClientIP()
3、自定义中间件:
3.1 定义中间件方法
func IPAuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
}
}
3.2 使用中间件
r.Use(IPAuthMiddleware())4、中间件校验不通过直接退出
c.Abort() // 不终止退出的话,会继续调用接口,输出接口内容,与中间件检验拦截目的不符
package main
import (
"bytes"
"fmt"
"github.com/gin-gonic/gin"
"io/ioutil"
"net/http"
)
func main() {
r := gin.Default()
r.POST("/test", func(c *gin.Context) {
bodyBytes, err := ioutil.ReadAll(c.Request.Body)
if err != nil {
c.String(http.StatusBadRequest, err.Error())
c.Abort()
}
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
name := c.PostForm("name")
c.String(http.StatusOK, "%s, %s", name, string(bodyBytes))
})
err := r.Run()
if err != nil {
fmt.Println(err)
}
}curl -X POST "http://127.0.0.1:8080/test" -d "name=zqunor"
虽然能实现,但是感觉回传不是个好方案。

c.ShouldBind();百年规定结构体
c.Query("test","默认值");//获取url参数
获取参数
自定义验证规则4
自定义验证规则3
自定义验证规则2
自定义验证规则1
结构体验证
获取body内容
获取请求参数
请求路由泛绑定~
设置静态资源
路径带参数 uri
优雅关停!
其他补充
优雅关停
模板渲染
自动证书配置
中间件
使用 gin 中间件
自定义 ip 白名单中间件
获取请求参数
获取 GET 请求参数
获取 POST 请求参数
获取 Body 值
获取参数绑定结构体
开发环境准备
golang 1.12
gin 1.4.0
goland
期待有更详细的课程,赞赞赞!!!
gin路由的写法就是比较爽