Goalng web开发

net/httpRESTful
githubwebstar
beggogin

创建项目 安装依赖

mkdir gin-demo
// add to env var
cd gin-demo
go get github.com/gin-gonic/gin
cd src
touch main.go

Hello World

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run() // listen and serve on 0.0.0.0:8080
}
pong

分析一下这段代码,首先导入gin包,获取一个引擎实例,然后做路由分发,监听端口。

POST方法

r.POST("/post",func(c *gin.Context){
        c.JSON(200,gin.H{
            "message":"ok",
        })
    })
postman
{
    "message": "ok"
}

QueryString查询字符串

htttp://www.example.com/api/user?id=1

要想获取id,我们可以这样来做:

r.GET("/user",func(c *gin.Context){
        id := c.Query("id")
        c.JSON(200,gin.H {
            "id":id,
        })
    })

结果为:

{
    "id": "1"
}

面向资源的请求

http://www.example.com/api/users/1
r.GET("/users/:id",func(c *gin.Context){
        id := c.Param("id")
        c.JSON(200,gin.H{
            "id":id,
        })
    })

结果为:

{
    "id": "1"
}

form-data x-www-form-urlencoded

r.POST("/form",func(c *gin.Context) {
        id := c.PostForm("id")
        name := c.DefaultPostForm("name","unknow")
        c.JSON(200,gin.H{
            "id":id,
            "name":name,
        })
    })

返回:

{
    "id": "1",
    "name": "unknow"
}

post json

r.POST("json",func(c *gin.Context){
        user := new (User)
        err := c.BindJSON(user)
        if err != nil {
            fmt.Println(err)
            return
        }
        c.JSON(200,gin.H{
            "name":user.Name,
            "id":user.Id,
        })
c.BindJSON(),将为我们返回结构体