Goalng web开发
使用go语言来做web开发,是非常方便的。如果不使用框架,仅仅使用net/http
包,也能快速开发一个web应用。但是,官方包不支持RESTful
风格的API,所以我们依然还是需要选择一个框架来帮助我们进行开发。
我们在github
上输入web
,选择go语言项目,按star
数进行排序,大概有以下几个项目,在社区中比较受欢迎:
其中值得一提的是,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(),将为我们返回结构体
。