学习Golang差不多有一个星期时间,开始自己做点小功能,练练手。

Gin 介绍

Gin 是一个 Golang 写的 web 框架,具有高性能的优点,,基于 httprouter,

它提供了类似martini但更好性能(路由性能约快40倍)的API服务。

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

安装框架

配置好GOPATH,建议自己在GOPATH建个项目,这里我以aze.org作为项目目录。

$ go get github.com/gin-gonic/gin

安装mysql驱动

$ go get github.com/go-sql-driver/mysql

组织项目

经过上面的model和handler的分离,代码结构变得更加清晰,可是我们还是单文件。下一步将进行封装不同的包。

数据库处理

在项目根目录创建下面三个文件夹,apis,databases和models,并在文件夹内创建文件。此时我们的目录结果如下

apis文件夹存放我们的handler函数,models文件夹用来存放我们的数据模型。

mysql.go:

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())

}

}

因为我们需要在别的地方使用SqlDB这个变量,因此依照golang的习惯,变量名必须大写开头。

数据model封装

修改models文件夹下的person.go,把对应的Person结构及其方法移到这里:

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

}

..............

handler

然后把具体的handler函数封装到api包中,因为handler函数要操作数据库,所以会引用model包

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,

})

}

......

路由

最后就是把路由抽离出来,修改router.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

}

app入口

最后就是main函数的app入口,将路由导入,同时我们要在main函数结束的时候,关闭全局的数据库连接池:

main.go

package main

import (

db "aze.org/database"

)

func main() {

defer db.SqlDB.Close()

router := initRouter()

router.Run(":8000")

}

此时运行项目,不能像之前简单的使用go run main.go,因为包main包含main.go和router.go的文件,因此需要运行go run *.go命令编译运行。如果是最终编译二进制项目,则运行go build -o app,生成app文件直接./app就可以运行项目了。

总结

1.通过上述的实践,我们了解了Gin框架创建基本的的restful服务。

2.golang 关键字不多,但是语法还是挺多的,需要认真学习,打好基础。

3.多看优秀的框架,再进行思考有没有更好的写法。

参考教程:

项目地址:

golang gin mysql_Golang 的Gin框架入门教学相关推荐

  1. Taro 框架入门教学视频

    Taro 框架入门教学视频 千锋教育出品这个教程 https://www.bilibili.com/video/BV1W7411v7LU ,比系统学习文档更快捷(文档可能很多用不上)2020 年初,以 ...

  2. Golang 的Gin框架入门教学

    学习Golang差不多有一个星期时间,开始自己做点小功能,练练手. Gin 介绍 Gin 是一个 Golang 写的 web 框架,具有高性能的优点,,基于 httprouter, 它提供了类似mar ...

  3. go mysql教学_Golang 的Gin框架入门教学

    学习Golang差不多有一个星期时间,开始自己做点小功能,练练手. Gin 介绍 Gin 是一个 Golang 写的 web 框架,具有高性能的优点,,基于 httprouter,它提供了类似mart ...

  4. 【Gin框架】框架入门

    阅读目录 一.Gin 介绍 二.Gin 环境搭建 三.golang 程序的热加载 四.Gin 框架中的路由 4.1.路由概述 4.2.简单的路由配置 4.3.c.String().c.JSON().c ...

  5. Golang源码学习----gin框架简单阅读

    一.热加载go get github.com/pilu/fresh快速编译,省去了每次手动go run二.gin特点轻量级.运行速度快,性能.高效擅长API接口的高并发,项目规模不大,业务简单三.En ...

  6. Golang库学习笔记 Gin(三)

    快速入门 今天,我们将要基于一个例子,学习如何使用GIN框架. 目录 文章目录 快速入门 目录 要求 安装 1.下载并安装 gin: 2.将 gin 引入到代码中: 3.(可选)如果使用诸如 http ...

  7. Golang 库学习笔记 Gin(二)

    介绍 Gin 是一个用 Go (Golang) 编写的 web 框架. 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 http router,速度提高了近 40 倍. 如果你 ...

  8. gin 项目结构_Gin框架中文文档

    最近更新时间:2019-02-20 Gin 是一个 go 写的 web 框架,具有高性能的优点.官方地址:https://github.com/gin-gonic/gin 目录 [TOC] 安装 要安 ...

  9. Golang库学习笔记 Gin(一)

    GIN GIN 是Go语言的一个比较成熟的HTTP web 框架,运行速度很快. 目录 文章目录 GIN 目录 正文 如何使用 Gin? 如何为 Gin 做贡献? 正文 Gin 是一个用 Go (Go ...

  10. Gin实战:Gin+Mysql简单的Restful风格的API

    我们已经了解了Golang的Gin框架.对于Webservice服务,restful风格几乎一统天下.Gin也天然的支持restful.下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全.我们先以一 ...

最新文章

  1. 快速访问github镜像 wiki镜像重点_github问题小结
  2. python set没有顺序_Python一题多解学思路:指定列前置
  3. 最详细的java泛型详解
  4. js获取int类型长度_js代码比较大小前需要把string转换int
  5. linux指令:输出重定向与追加- 输出重定向 - 表示追加
  6. CSS 字体调整 font-size-adjust属性
  7. 微信打击违规贷款、仿冒公众号等行为 累积处罚3万多个公众号
  8. mysql跨库分页查询,“跨库分页”的四种方案
  9. 简直不要太硬了!一文带你彻底理解文件系统 | 原力计划
  10. 15数码 java_A*算法求解15数码问题
  11. Xcode安装及卸载
  12. Echarts数据可视化radar雷达坐标系,开发全解+完美注释
  13. oracle客户端odbc安装程序,Oracle Instant Client ODBC 安装说明
  14. python将多个txt内容合并_python合并多个txt文件成为一个文件
  15. 计算机怎么使用远程桌面工具,win7一键开启远程桌面工具
  16. SpringBoot框架下集成萤石云平台开发海康的摄像头
  17. Incorrect string value: '\xF0\x9F\x91\x93\xF0\x9F...' for column 'xxx' at row 1
  18. 开发人员的十种必备工具
  19. el-option显示value而不是lable的问题
  20. 开机弹框显示IGCCTray.exe异常的修复方式

热门文章

  1. 实践:VB创建Com组件 在Asp以及.Net中调用
  2. [Android] 环境配置之正式版Android Studio 1.0
  3. 安装vue-devtool
  4. kubectl配置tab补全
  5. mysql的读写分离配置
  6. c语言qsort函数对结构体的一级排序,sort和qsort函数对结构体的二级排序
  7. mysql zf_ZF 连接 Mysql
  8. labview csv文件处理_Labview搭建Web服务器
  9. python3.6 asyncio paramiko_网工的Python之路:Concurrent.Futures
  10. oracle永久表设置,Oracle 表空间简单管理永久表空间