mkdir ch1 && cd ch1
go mod init ch1
# go install 是安装到~/go/bin下
go get -u github.com/gin-gonic/gin
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端口启动服务
}
go mod tidy
go mod vendor
go run main.go
# another shell
curl localhost:8080/hello
GET用来获取资源
POST用来新建资源
PUT用来更新资源
DELETE用来删除资源
GET /student 查询学生信息
POST /create_student 创建学生信息
PUT /updata_student 更新学生信息
DELETE /delete_student 删除学生信息
# 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
mkdir templates && touch index.html
{{.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
curl -X GET localhost:8080/index
curl -X POST localhost:8080/login
中间件:在处理请求的过程中,加入钩子函数,这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登陆认证,权限校验,记录日志等。具体使用方法如下
当在中间件或 handler 中启动新的 Goroutine 时,不能使用原始的上下文,必须使用只读副本。(我不会)
为了能够更方便的获取请求相关参数,提高开发效率,我们可以使用ShouldBind,它能够基于请求自动提取JSON,Form表单,Query等类型的值,并把值绑定到指定的结构体对象,具体使用方法如下
go get -v -u github.com/pilu/fresh
请求返回的数据类型初谈
使用命令fresh 代替 go run main.go