Golang web开发

Goalng web开发

使用go语言来做web开发,是非常方便的。如果不使用框架,仅仅使用net/http包,也能快速开发一个web应用。但是,官方包不支持RESTful风格的API,所以我们依然还是需要选择一个框架来帮助我们进行开发。

我们在github上输入web,选择go语言项目,按star数进行排序,大概有以下几个项目,在社区中比较受欢迎:

  • caddy

  • gin

  • beego

  • martini

  • gotty

  • echo

  • revel

  • iris

其中值得一提的是,beggo是国人开发维护的项目,作为起步学习阶段,我们选择大名鼎鼎的gin项目进行探索。

创建项目 安装依赖

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
}

当我们运行这段代码之后,程序将监听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,
        })

获取json数据,使用c.BindJSON(),将为我们返回结构体

你可能感兴趣的:(Golang web开发)