带你入门gin框架

Posted webRambler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你入门gin框架相关的知识,希望对你有一定的参考价值。

Gin是一款基于Go语言的Web框架,它具有高性能、易用性和丰富的功能。下面详细介绍一下Gin框架的用法。

一、安装Gin框架

  1. 安装Go环境

首先需要安装Go语言的开发环境,具体安装方法可以参考Go官网:https://golang.org/doc/install。

  1. 安装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 
mysql.go
技术图片
 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 
models文件夹下的person.go
技术图片
 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 
apis的person.go
技术图片
 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 
router.go
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框架的主要内容,如果未能解决你的问题,请参考以下文章

基于gin web框架搭建RESTful API服务

Go实战--通过gin-gonic框架搭建restful api服务(github.com/gin-gonic/gin)

Gin框架入门系列1:基本框架

学习go gin框架

学习go gin框架

学习go gin框架