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文件夹用来存放我们的数据模型
 package database

 import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"log"
) var SqlDB *sql.DB func init() {
var err error
SqlDB, err = sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test?parseTime=true")
if err != nil {
log.Fatal(err.Error())
}
err = SqlDB.Ping()
if err != nil {
log.Fatal(err.Error())
}
}

mysql.go

 package models

 import (
"log"
db "newland/database"
) type Person struct {
Id int `json:"id" form:"id"`
FirstName string `json:"first_name" form:"first_name"`
LastName string `json:"last_name" form:"last_name"`
} func (p *Person) AddPerson() (id int64, err error) {
rs, err := db.SqlDB.Exec("INSERT INTO person(first_name, last_name) VALUES (?, ?)", p.FirstName, p.LastName)
if err != nil {
return
}
id, err = rs.LastInsertId()
return
} func (p *Person) GetPersons() (persons []Person, err error) {
persons = make([]Person, 0)
rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person")
defer rows.Close() if err != nil {
return
} for rows.Next() {
var person Person
rows.Scan(&person.Id, &person.FirstName, &person.LastName)
persons = append(persons, person)
}
if err = rows.Err(); err != nil {
return
}
return
}

models文件夹下的person.go

 package apis

 import (
"net/http"
"log"
"fmt"
"github.com/gin-gonic/gin"
. "aze.org/models"
) func IndexApi(c *gin.Context) {
c.String(http.StatusOK, "It works")
} func AddPersonApi(c *gin.Context) {
firstName := c.Request.FormValue("first_name")
lastName := c.Request.FormValue("last_name") p := Person{FirstName: firstName, LastName: lastName} ra, err := p.AddPerson()
if err != nil {
log.Fatalln(err)
}
msg := fmt.Sprintf("insert successful %d", ra)
c.JSON(http.StatusOK, gin.H{
"msg": msg,
})
}

apis的person.go

 package main

 import (
"github.com/gin-gonic/gin"
. "aze.orgd/apis"
) func initRouter() *gin.Engine {
router := gin.Default() router.GET("/", IndexApi) router.POST("/person", AddPersonApi) router.GET("/persons", GetPersonsApi) router.GET("/person/:id", GetPersonApi) router.PUT("/person/:id", ModPersonApi) router.DELETE("/person/:id", DelPersonApi) return router
}

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

最新文章

  1. NPOI、MyXls、Aspose.Cells 导入导出Excel(转)
  2. Add a Syscall
  3. 【CodeForces 699D】Fix a Tree
  4. javascript的封装实例
  5. MongoDB学习(二)Windows环境安装MongoDB
  6. 2014 top100
  7. 九度OJ 1434 今年暑假不AC
  8. [Silverlight]常见问题
  9. office2010安装出错,windows installer服务不能更新一个或多个受保护的windows文件
  10. 选择Blobs (Evision)
  11. 主库的wal日志已经被归档或异常丢失如何搭建从库
  12. docker简单介绍---部署私有docker仓库Registry
  13. Canvas入门到高级详解(中)
  14. jqeury点击空白关闭弹窗
  15. python 之字符编码
  16. java之不修改变量的数据类型的处理方式
  17. 有哪些sql优化工具
  18. 代理模式 静态代理、JDK动态代理、Cglib动态代理
  19. android仿QQ的SlideMenu
  20. 使用Ping命令解析主机名解析出来的是IPv6

热门文章

  1. Centos7 下nginx 搭建文件图片服务器
  2. vbox 设置时间不与主机同步
  3. Elasticsearch 技术分析(九):Elasticsearch的使用和原理总结
  4. YOLO V1损失函数理解
  5. Yarn工作机制
  6. 【Java中级】(三)IO
  7. .net持续集成sonarqube篇之项目管理与用户管理
  8. go mod 无法自动下载依赖包的问题
  9. PHP与ECMAScript_2_数据类型
  10. 脱壳0-FSG壳-详细流程