gin简单使用-

菜鸟(指我)

  • github.com/zbs-test/go_mods_with_gin

这是go 工程化实践(测试版)

使用lapce了

ch1

  • what have I done
  1. 使用gin框架,go-1.20
mkdir ch1 && cd ch1
go mod init ch1
# go install 是安装到~/go/bin下
go get -u github.com/gin-gonic/gin
  1. main.go

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	r := gin.Default()
	//定义路由的GET方法及响应处理函数
	r.GET("/hello", func(c *gin.Context) {
		//将发送的信息封装成JSON发送给浏览器
		c.JSON(http.StatusOK, gin.H{
			//这是我们定义的数据
			"message": "快速入门",
		})
	})
	
	r.Run() //默认在本地8080端口启动服务
}
  1. download and run
go mod tidy
go mod vendor
go run main.go
# another shell
curl localhost:8080/hello

ch2

  • what have I done
  1. restful api
GET用来获取资源
POST用来新建资源
PUT用来更新资源
DELETE用来删除资源

 GET	 /student	 查询学生信息
 POST	 /create_student	 创建学生信息
 PUT	 /updata_student	 更新学生信息
 DELETE	 /delete_student	 删除学生信息
  1. 简单实现restful api(main.go)
  2. 使用curl来模拟postman
# get
curl localhost:8080/student
# post 这里没有要传输的数据, 使用 -F "name=" -F "[email protected]"来传值
curl localhost:8080/create_student
# put
curl -X PUT localhost:8080/update_student
# delete -v 是显示更多请求的信息
curl -v -X DELETE localhost:8080/delete_student

ch3

  • what have I done
  1. 前面步骤类似,创建要渲染html页面
mkdir templates && touch index.html
  1. 运行和查看/index
  2. 自己创建页面和展示,使用数据绑定

ch4

  • what have I done
  1. 获取url请求的参数,参数是使用?和&隔开,这里不再用curl,用浏览器
  2. localhost:8080/?name=admin&pwd=123456
  3. 页面呈现你的请求参数

ch5

  • what have I done
  1. 获得Form表单的请求参数数据
  2. 在login.html实现登陆逻辑代码,涉及到input submit,和页面跳转(未实现)
  3. 在index.html实现渲染username,password(未实现)

ch5-1

  1. templates 多层目录的渲染方式
  2. LoadHTMLGlob templates/**/* {{define “user/index.html”}} {{end}} . “data”:
  3. 更多渲染指令(模版语法):
{{.title}}
{{$t := .title}} //将.title赋值给$t
{{$t}} //输出$t

//  逻辑判断
{{if gt .score 90}}  ...html标签
{{ else if gt .score 80 }} ...
{{else}} ...
{{end}}

//  循环遍历
{{range $key, $value := .hobbies}} // .hobbies在后台是数组
<li>{{$key}} is {{$value}}</li>
{{else}} ...
{{end}}

// 解绑后台传到前台的结构体字段
{{with .user}} // user在后台是一个结构体
	{{.Name}}
	...
{{end}}

// 内置函数
{{len .somethins}} //

// 自定义模版函数
! 在main方法下加入配置 `r.SetFuncMap(template.FuncMap{
	"UnixToTime":UnixToTime,
})` 和在main函数上面定义这个UnixToTime函数   (注册函数)
---

// 子模版(公共模版)定义和导入
1. 定义 {{define "public/te1.html"}} ...html {{end}}
2. 引入 {{template "public/te1.html" .}} //注意 `.`

// 配置静态文件
! main方法下 r.Static("/static","./static") // url request router , local static file path

ch6

  • what I have done
  1. 实现url动态传参
  2. 浏览器输入: localhost:8080/user/

ch7

  • what I have done
  1. 路由组的实现,统一处理路由,保持美观
  2. curl请求
curl -X GET localhost:8080/index
curl -X POST localhost:8080/login
  1. 注释和实现路由嵌套,按标注的方法查询

ch8

  • what I have done

中间件:在处理请求的过程中,加入钩子函数,这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登陆认证,权限校验,记录日志等。具体使用方法如下

  1. 实现中间件, 做请求耗时统计
  2. 注释看第二段代码

当在中间件或 handler 中启动新的 Goroutine 时,不能使用原始的上下文,必须使用只读副本。(我不会)

ch9

  • what I have done
  1. gin 参数绑定

为了能够更方便的获取请求相关参数,提高开发效率,我们可以使用ShouldBind,它能够基于请求自动提取JSON,Form表单,Query等类型的值,并把值绑定到指定的结构体对象,具体使用方法如下

  1. 创建查询: localhost:8080/user?username=good&password=123
  2. 查看后台的获取数据

ch10(已略过)

  • what I have done
  1. 实现简单的文件上传

ch11

  • what I have done
  1. 路由重定向和http重定向(就是请求到其他网络页面去)
  2. 查看main.go

ch12(已略过)

  • what I have done
  1. 设置和获取cookie

ch13

  • what I have done
  1. 日志记录到文件
  2. 这是信息不再输出到控制台,而是输入了gin.log文件,查看它

ch14(已失败)–(已修复用go install 代替go get就行)

  • what I have done
  1. 实现热重栽(未实现)
go get -v -u github.com/pilu/fresh

ch15

  1. 请求返回的数据类型初谈

  2. 使用命令fresh 代替 go run main.go

开始使用go-micro微服务,因为我不会spring boot和spring cloud

  • 更侧重服务治理,不是很侧重api
  • 集成gin和go-micro

m1

  • what I have done
  1. 创建web api

你可能感兴趣的:(go框架,gin)