生命不止,继续 go go go !!!

先插播一条广告,给你坚持学习golang的理由:
《2017 软件开发薪酬调查:Go 和 Scala 是最赚钱的语言》

言归正传!

之前写过使用golang实现简单的restful api相关的博客:
Go实战–实现简单的restful api(The way to go)

其中,使用了github.com/gorilla/mux,今天要跟大家介绍的是gin-gonic/gin。

gin-gonic/gin
介绍:
Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance – up to 40 times faster. If you need smashing performance, get yourself some Gin.

github地址:
https://github.com/gin-gonic/gin

获取:

go get github.com/gin-gonic/gin
1
例子:

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()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
运行:

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET /ping --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
1
2
3
4
5
6
7
8
通过浏览器访问:
http://localhost:8080/ping

// 20170808110257
// http://localhost:8080/ping

{
"message": "pong"
}
1
2
3
4
5
6
全局设置环境:

gin.SetMode(gin.DebugMode)
1

gin.SetMode(gin.ReleaseMode)
1
获得路由实例:

r := gin.Default()
1
构建restful api

创建五个routes:

package main

import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
v1 := router.Group("/api/v1/userinfo")
{
v1.POST("/", CreateUser)
v1.GET("/", FetchAllUsers)
v1.GET("/:id", FetchSingleUser)
v1.PUT("/:id", UpdateUser)
v1.DELETE("/:id", DeleteUser)
}
router.Run()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
下面我们要使用gin+mysql构建restful api。
如果对于golang中的MySQL不够熟悉的话,可以看看我之前写过的博文:
Go实战–go语言操作MySQL数据库(go-sql-driver/mysql)

先实现一个简单的根据id来FetchSingleUser吧:
我们事先通过命令行创建了user_info表以及一行数据,id=2, name=wangshubo

开始golang程序:
定义结构体:

type Person struct {
Id int
Name string
}
1
2
3
4
check函数:

func checkErr(err error) {
if err != nil {
panic(err)
}
}
1
2
3
4
5
FetchSingleUser方法:
我们要返回json, gin对json也进行了封装,所以不再需要我们提供类似encoding/json之类的package。

func FetchSingleUser(c *gin.Context) {

id := c.Param("id")

db, err := sql.Open("mysql", "root:wangshubo@/test?charset=utf8")
checkErr(err)

defer db.Close()

err = db.Ping()
checkErr(err)

var (
person Person
result gin.H
)
row := db.QueryRow("select id, name from user_info where id = ?;", id)
err = row.Scan(&person.Id, &person.Name)
if err != nil {
// If no results send null
result = gin.H{
"result": nil,
"count": 0,
}
} else {
result = gin.H{
"result": person,
"count": 1,
}
}
c.JSON(http.StatusOK, result)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
浏览器访问:
http://localhost:8080/api/v1/userinfo/1

// 20170808141904
// http://localhost:8080/api/v1/userinfo/1

{
"count": 0,
"result": null
}
1
2
3
4
5
6
7
浏览器访问:
http://localhost:8080/api/v1/userinfo/2

// 20170808141940
// http://localhost:8080/api/v1/userinfo/2

{
"count": 1,
"result": {
"Id": 2,
"Name": "wangshubo"
}
}
1
2
3
4
5
6
7
8
9
10
gin输出log:

[GIN] 2017/08/08 - 14:19:03 | 200 | 16.0127ms | ::1 | GET /api/v1/userinfo/1
[GIN] 2017/08/08 - 14:19:39 | 200 | 56.0381ms | ::1 | GET /api/v1/userinfo/2
1
2
未完待续:
组织代码结构
---------------------
作者:一蓑烟雨1989
来源:CSDN
原文:https://blog.csdn.net/wangshubo1989/article/details/76906605
版权声明:本文为博主原创文章,转载请附上博文链接!

Go实战--通过gin-gonic框架搭建restful api服务(github.com/gin-gonic/gin)的更多相关文章

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

    这篇主要学习go项目中的项目结构.项目规范等知识,ROM采用的database/sql的写法. 1.技术框架 利用的是ginweb框架,然后ROM层选用database/sql,安装mysql驱动.安 ...

  2. 使用CodeIgniter框架搭建RESTful API服务

    使用CodeIgniter框架搭建RESTful API服务 发表于 2014-07-12   |   分类于 翻译笔记   |   6条评论 在2011年8月的时候,我写了一篇博客<使用Cod ...

  3. 基于Gin+Gorm框架搭建MVC模式的Go语言后端系统

    文/朱季谦 环境准备:安装Gin与Gorm 本文搭建准备环境:Gin+Gorm+MySql. Gin是Go语言的一套WEB框架,在学习一种陌生语言的陌生框架,最好的方式,就是用我们熟悉的思维去学.作为 ...

  4. 使用 Beego 搭建 Restful API 项目

    1 环境准备 首先你需要在你的环境安装以下软件: go:编程语言运行环境 git:版本控制工具 beego:go 语言流行的开发框架 bee:beego 配套的快速搭建工具 你喜欢的数据库:这里以 M ...

  5. 【PHP】基于ThinkPHP框架搭建OAuth2.0服务

    [PHP]基于ThinkPHP框架搭建OAuth2.0服务 http://leyteris.iteye.com/blog/1483403

  6. 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务

    本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...

  7. 开放接口/RESTful/Api服务的设计和安全方案

    总体思路 这个涉及到两个方面问题:一个是接口访问认证问题,主要解决谁可以使用接口(用户登录验证.来路验证)一个是数据数据传输安全,主要解决接口数据被监听(HTTPS安全传输.敏感内容加密.数字签名) ...

  8. 玩转 SpringBoot 2 快速搭建 | RESTful Api 篇

    概述 RESTful 是一种架构风格,任何符合 RESTful 风格的架构,我们都可以称之为 RESTful 架构.我们常说的 RESTful Api 是符合 RESTful 原则和约束的 HTTP ...

  9. 搭建RESTful API 之 实现WSGI服务的URL映射

    javarestfull 搭建参考 http://blog.csdn.net/hejias/article/details/47424511 问题引出:对于一个稍具规模的网站来说,实现的功能不可能通过 ...

随机推荐

  1. HDU-1041-Computer Transformation,大数递推,水过~~

                                                                                  Computer Transformatio ...

  2. ACDream:1210:Chinese Girls' Amusement【水题】

    Chinese Girls' Amusement Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Oth ...

  3. Vim enhance part1

    NO1 .认识.命令 例 删除man.config中第1到30行的注释 1.光标移到#上,按下x删除 2.按下j将光标移到第二行#上,之后按下. 3.可以看到第2行的#也被删除了因为.就是重复上次命令 ...

  4. java web 项目常用框架

    java框架实在是太多了,网上一搜索一大箩筐,根本就了解不到什么. 我还是以我的经验来说一下j2ee的框架. 1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出 ...

  5. 【POJ1149&BZOJ1280】PIGS(最大流)

    题意:Emmy在一个养猪场工作.这个养猪场有M个锁着的猪圈,但Emmy并没有钥匙. 顾客会到养猪场来买猪,一个接着一个.每一位顾客都会有一些猪圈的钥匙,他们会将这些猪圈打开并买走固定数目的猪. 所有顾 ...

  6. BZOJ1740: [Usaco2005 mar]Yogurt factory 奶酪工厂

    n<=10000天每天Ci块生产一东西,S块保存一天,每天要交Yi件东西,求最少花多少钱. 这个我都不知道归哪类了.. #include<stdio.h> #include<s ...

  7. 洛谷——P1451 求细胞数量

    P1451 求细胞数量 题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=10 ...

  8. 2018.11.5 PION模拟赛

    期望:30 + 40 + 50 = 120 实际:30 + 50 + 40 = 120 ‘’ 思路:最重要的是发现 是完全没有用的,然后这个题目就可以转成DP来做. /* 期望的分:30 */ #in ...

  9. 【Nginx】Hello world程序

    模块如何在运行中生效 配置文件中的location块决定了匹配某种URL的请求将会由相应的HTTP模块处理,因此,运行时HTTP框架会在接收完毕HTTP请求的头部后,将请求的URL与配置文件中的所有l ...

  10. 在SUSE12中使用 Machinery 进行高级系统管理

    简单介绍 在 SUSE Linux Enterprise 12 中.SUSE 如今推出了面向系统管理员的 Machinery.作为其高级系统管理模块的一部分.Machinery 是适用于 Linux ...