带你入门gin框架
Posted webRambler
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你入门gin框架相关的知识,希望对你有一定的参考价值。
Gin是一款基于Go语言的Web框架,它具有高性能、易用性和丰富的功能。下面详细介绍一下Gin框架的用法。
一、安装Gin框架
- 安装Go环境
首先需要安装Go语言的开发环境,具体安装方法可以参考Go官网:https://golang.org/doc/install。
- 安装Gin框架
可以使用以下命令安装Gin框架:
go get -u github.com/gin-gonic/gin
二、使用Gin框架
1. 创建一个简单的Gin应用
package main
import "github.com/gin-gonic/gin"
func main()
r := gin.Default()
r.GET("/", func(c *gin.Context)
c.JSON(200, gin.H
"message": "Hello, world!",
)
)
r.Run() // 监听并在 0.0.0.0:8080 上启动服务
2. 路由
Gin框架的路由功能非常强大,支持GET、POST、PUT、DELETE等HTTP方法,并且支持RESTful风格的API设计。
// GET请求
r.GET("/user", func(c *gin.Context)
c.String(http.StatusOK, "GET")
)
// POST请求
r.POST("/user", func(c *gin.Context)
c.String(http.StatusOK, "POST")
)
// PUT请求
r.PUT("/user/:id", func(c *gin.Context)
id := c.Param("id")
c.String(http.StatusOK, "PUT "+id)
)
// DELETE请求
r.DELETE("/user/:id", func(c *gin.Context)
id := c.Param("id")
c.String(http.StatusOK, "DELETE "+id)
)
3. 参数传递
Gin框架支持URL参数、查询参数和请求体参数的获取。
- 获取URL参数
r.GET("/user/:id", func(c *gin.Context)
id := c.Param("id")
c.String(http.StatusOK, "User ID: %s", id)
)
- 获取查询参数
r.GET("/user", func(c *gin.Context)
name := c.Query("name")
age := c.Query("age")
c.String(http.StatusOK, "Name: %s, Age: %s", name, age)
)
- 获取请求体参数
type User struct
Name string `json:"name"`
Age int `json:"age"`
r.POST("/user", func(c *gin.Context)
var user User
if err := c.ShouldBindJSON(&user); err != nil
c.String(http.StatusBadRequest, "Invalid request")
return
c.String(http.StatusOK, "Name: %s, Age: %d", user.Name, user.Age)
)
4. 中间件
中间件是Gin框架的一个非常重要的特性,可以用于处理一些公共逻辑,例如日志记录、认证、授权等。
// 全局中间件
r.Use(Logger())
// 路由级中间件
r.GET("/user", Auth(), func(c *gin.Context)
// 处理逻辑
)
5. 静态文件
Gin框架支持静态文件的服务,可以通过以下方式进行配置:
r.Static("/static", "./static")
r.StaticFile("/favicon.ico", "./static/favicon.ico")
6. 模板引擎
Gin框架也支持模板引擎,目前支持的模板引擎有html、JSON、XML和YAML。
// HTML模板引擎
r.LoadHTMLGlob("templates/*")
r.GET("/index", func(c *gin.Context)
c.HTML(http.StatusOK, "index.tmpl", gin.H
"title": "Gin",
)
)
// JSON、XML、YAML模板引擎
r.GET("/json", func(c *gin.Context)
c.JSON(http.StatusOK, gin.H
"message": "Hello, world!",
)
)
r.GET("/xml", func(c *gin.Context)
c.XML(http.StatusOK, gin.H
"message": "Hello, world!",
)
)
r.GET("/yaml", func(c *gin.Context)
c.YAML(http.StatusOK, gin.H
"message": "Hello, world!",
)
)
7. 错误处理
Gin框架支持自定义错误处理器,可以通过以下方式进行配置:
// 自定义错误处理器
r.NoRoute(func(c *gin.Context)
c.JSON(http.StatusNotFound, gin.H"message": "Not Found")
)
以上就是Gin框架的使用方法,当然还有很多其他的功能,例如文件上传、WebSocket、HTTP/2等,需要根据具体需求进行使用。
Go最火的Gin框架简单入门
Gin 介绍
Gin 是一个 Golang 写的 web 框架,具有高性能的优点,,基于 httprouter,它提供了类似martini但更好性能(路由性能约快40倍)的API服务。官方地址:https://github.com/gin-gonic/gin
安装框架
配置好GOPATH,建议自己在GOPATH建个项目,这里我以Go_GinStart作为项目目录。
$ go get github.com/gin-gonic/gin
安装mysql驱动
$ go get github.com/go-sql-driver/mysql
项目组织结构
在项目根目录创建下面三个文件夹,apis,databases和models,并在文件夹内创建文件。
-
apis文件夹存放我们的handler函数
-
models文件夹用来存放我们的数据模型
1 package database 2 3 import ( 4 "database/sql" 5 _ "github.com/go-sql-driver/mysql" 6 "log" 7 ) 8 9 var SqlDB *sql.DB 10 11 func init() 12 var err error 13 SqlDB, err = sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test?parseTime=true") 14 if err != nil 15 log.Fatal(err.Error()) 16 17 err = SqlDB.Ping() 18 if err != nil 19 log.Fatal(err.Error()) 20 21
1 package models 2 3 import ( 4 "log" 5 db "newland/database" 6 ) 7 8 type Person struct 9 Id int `json:"id" form:"id"` 10 FirstName string `json:"first_name" form:"first_name"` 11 LastName string `json:"last_name" form:"last_name"` 12 13 14 func (p *Person) AddPerson() (id int64, err error) 15 rs, err := db.SqlDB.Exec("INSERT INTO person(first_name, last_name) VALUES (?, ?)", p.FirstName, p.LastName) 16 if err != nil 17 return 18 19 id, err = rs.LastInsertId() 20 return 21 22 23 func (p *Person) GetPersons() (persons []Person, err error) 24 persons = make([]Person, 0) 25 rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person") 26 defer rows.Close() 27 28 if err != nil 29 return 30 31 32 for rows.Next() 33 var person Person 34 rows.Scan(&person.Id, &person.FirstName, &person.LastName) 35 persons = append(persons, person) 36 37 if err = rows.Err(); err != nil 38 return 39 40 return 41
1 package apis 2 3 import ( 4 "net/http" 5 "log" 6 "fmt" 7 "github.com/gin-gonic/gin" 8 . "aze.org/models" 9 ) 10 11 func IndexApi(c *gin.Context) 12 c.String(http.StatusOK, "It works") 13 14 15 func AddPersonApi(c *gin.Context) 16 firstName := c.Request.FormValue("first_name") 17 lastName := c.Request.FormValue("last_name") 18 19 p := PersonFirstName: firstName, LastName: lastName 20 21 ra, err := p.AddPerson() 22 if err != nil 23 log.Fatalln(err) 24 25 msg := fmt.Sprintf("insert successful %d", ra) 26 c.JSON(http.StatusOK, gin.H 27 "msg": msg, 28 ) 29
1 package main 2 3 import ( 4 "github.com/gin-gonic/gin" 5 . "aze.orgd/apis" 6 ) 7 8 func initRouter() *gin.Engine 9 router := gin.Default() 10 11 router.GET("/", IndexApi) 12 13 router.POST("/person", AddPersonApi) 14 15 router.GET("/persons", GetPersonsApi) 16 17 router.GET("/person/:id", GetPersonApi) 18 19 router.PUT("/person/:id", ModPersonApi) 20 21 router.DELETE("/person/:id", DelPersonApi) 22 23 return router 24
package main import ( db "aze.org/database" ) func main() defer db.SqlDB.Close() router := initRouter() router.Run(":8000")
运行项目,
go run main.go router.go
或者
如果是最终编译二进制项目,则运行
go build -o app //生成app文件直接./app就可以运行项目了。
参考教程:
Gin框架 详细文档地址:https://godoc.org/github.com/gin-gonic/gin
以上是关于带你入门gin框架的主要内容,如果未能解决你的问题,请参考以下文章
Go实战--通过gin-gonic框架搭建restful api服务(github.com/gin-gonic/gin)