学习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 databaseimport ("database/sql"_ "github.com/go-sql-driver/mysql""log"
)var SqlDB *sql.DBfunc init() {var err errorSqlDB, 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 modelsimport ("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 Personrows.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 apisimport ("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 mainimport ("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 mainimport (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.多看优秀的框架,再进行思考有没有更好的写法。

参考教程:

Gin框架 详细文档地址:https://godoc.org/github.com/gin-gonic/gin

项目地址:

https://github.com/onebig32/gin-learn.git

转载于:https://blog.51cto.com/onebig/2165621

Golang 的Gin框架入门教学相关推荐

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

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

  2. Taro 框架入门教学视频

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

  3. golang gin框架入门教程,gin框架脚手架,开箱即用

    gin-layout github地址:https://github.com/wannanbigpig/gin-layout Gin Project Template 本项目使用 gin 框架为核心搭 ...

  4. windows环境搭建golang的gin框架简易教程

    第一步:安装golang 下载go1.16.7.windows-amd64.msi安装程序,按照界面提示安装 第二步:配置golang代理库地址(此步可忽略) set GOPROXY=https:// ...

  5. 『Golang』Martini框架入门

    本文介绍golang中的优秀web开发框架martini! 序 Martini框架是使用Go语言作为开发语言的一个强力的快速构建模块化web应用与服务的开发框架.Martini是一个专门用来处理Web ...

  6. GIN框架(GOLANG)讲解如何疯速入门

    1.初始化项目: 1.初始化项目:go mod init  2.下载gin框架:go get -u github.com/gin-gonic/gin 可能用到的命令:go env -w GOSUMDB ...

  7. Go语言(Golang)的Web框架比较:gin VS echo

    Go语言(Golang)的web框架比较之:gin vs echo 由 butaixianran 在 2016-01-23 22:00 发布 35423 次点击 原文发在:https://771dia ...

  8. [转]Go语言(Golang)的Web框架比较:gin VS echo

    Go语言(Golang)的web框架比较之:gin vs echo 由 butaixianran 在 2016-01-23 22:00 发布 35423 次点击 原文发在:https://771dia ...

  9. Golang程序性能分析(二)在Echo和Gin框架中使用pprof

    前言 今天继续分享使用Go官方库pprof做性能分析相关的内容,上一篇文章:Golang程序性能分析(一)pprof和go-torch中我花了很大的篇幅介绍了如何使用pprof采集Go应用程序的性能指 ...

最新文章

  1. VSMFC程序显示命令行窗口
  2. android中px单位,android中像素单位dp、px、pt、sp的比较
  3. 2022-02-21
  4. mysql重装远程服务未_CentOS 7系统安装与远程连接MySQL(5.7)
  5. 视图、存储函数、存储过程、触发器:MySQL系列之五
  6. 2022年 预训练的下一步是什么?
  7. PyTorch 和 TensorFlow 引领未来
  8. python怎么导入背景_Pycharm主题设置以及导入方式
  9. 2022-2028年全球与中国细菌生物农药行业市场深度调研及投资预测分析
  10. React `controlled` 及 `uncontrolled` 组件
  11. aruba AP密码忘记恢复出厂设定
  12. 如何获取TouchSlop和源码浅析
  13. html中加粗的字体如何改细,css font-weight 属性设置文本字体的粗细
  14. 虚幻4渲染编程(材质编辑器篇)【第三卷:正式准备开始材质开发】
  15. 超市商品管理系统(课程设计)
  16. 五年级计算机绘画作品,五年级儿童节绘画作品大全
  17. 服装搭配软件测试自学,五大穿搭App评测推荐,轻松解决你的日常穿搭烦恼!
  18. 2023年全国最新会计专业技术资格精选真题及答案30
  19. [kettle]kettle“阻塞数据直到步骤都完成”无效
  20. 低温泵变频matlab,低温地热间接供热换热参数优化与MATLAB实现

热门文章

  1. JavaScript-WebStorm中配置Github并将代码托管到Github
  2. Spring-方法注入lookup、方法替换MethodReplacer接口
  3. 方舟修改显示服务器个数,方舟生存进化服务器模式设置教程
  4. sparkstreaming监听hdfs目录如何终止_Spark笔试题:Spark Streaming 反压机制
  5. java stringtoarray_java中toArray()的用法
  6. tensorflow手册_谷歌TensorFlow开发者认证考试来了!哪些要点需要了解?
  7. 鸿蒙不算安卓系统吗,加入鸿蒙≠使用鸿蒙,鸿蒙不属于华为也仅限于华为
  8. 数据结构之稀疏数组 - SparseArray
  9. Effective C++ --7 模板与泛型编程
  10. 第五天2017/04/06(下午3:静态链接库(Lib))