不知不觉,距离golang已经发布了10年了,劳资预言golang未来一定会是一等一非常好,非常棒的语言,不要问为什么,我就是这样觉得。微软2003年发布.net(目前好像也比较“”叼“的样子,注意“”叼”字加了双引号),苹果2007年发布Object C(后来变为Switch,劳资也不懂),Google作为世界上一等一的科技公司(至于百度不说了)
,肯定也要有自己的语言,于是golang 2009发布了,未来碾压.net,脚踢switch自然不在话下(这里不讨论语言好坏,其实能赚钱的技术好语言)。所以学习golang是很值得的。
可以参考文章:
部落图鉴之 Go:爹好还这么努力
但本教程不是教你学golang基础知识,而是讲解golang web框架gin,所以go环境自行安装,go基础请自行恶补。本课程以“程序员在囧途在线教育“课程+github为参考+自己的一点唠叨
学习gin需具备:
1、已经了解go语法基础(go 1.11+).了解Linux、docker(基本操作)
2、对其他语言有过简单的web代码编写基础
3、对数据库、redis 等 有所基础了解,能自行搭建环境
git github地址
https://github.com/gin-gonic/gin
废话不多说,下面开始我们看教程:
一、创建项目,分几步
1、随便创建一个文件夹(不要有中文、空格和奇怪的字符串,没有为什么)
2、在 api.jeng.com下创建topic ,代表 话题相关API(其实起什么名字都无所谓)
3、cd进入topic执行: go mod init topic.jeng.com (mod为go包管理工具,php有composer,node有npm,java有maven,python有pip,咱们go也不能差吧)
4、在当前(topic目录)目录cmd(终端)下执行
go get github.com/gin-gonic/gin(gin会自动安装在你的gopath目录下的xxxxxx/pkg/mod/github.com/下)
5、用goland 打开topic目录(goland采用2018.3以上版本,否则不支持mod索引啥的)
6、设置goland(Fiel->setting->Go:[1、GOROOT必须大于1.11版本,2、Go Modules勾选Enable Go Modules])
项目目录文件如下:
二、开始写代码
在topic项目目录创建main.go文件
根据github的案例教程无脑输入一下内容
package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() //创建默认路由,其实就是一个handler
//添加路由,不用为什么是 /ping(你可以可以设置为/user, /login),劳资复制GitHub官方的案例,保持原汁原味,所以多看官方文档 r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) })
//默认开启8080,如果需要开启其他的,可以设置r.Run(9090) r.Run() // listen and serve on 0.0.0.0:8080 }
执行goland菜单栏的run,项目运行后,使用chrome浏览器访问
http://localhost:8080/ping
即可看到输出内容 {"message":"pong"} #擦,原来gin的作者喜欢打乒乓
完了,gin就是这么简单,简单得“让人发指”
以下改装下代码:
其实代码也可以这样写:
package main import "github.com/gin-gonic/gin" type Topic struct{ TopicID int TopicTitle string } func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200,&Topic{101, "这是title"}) //传结构体 }) r.Run() // listen and serve on 0.0.0.0:8080 }
输出 {"TopicID":101,"TopicTitle":"这是title"}
或者这样写:
package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { m:=make(map[string]string) m["topicid"]="102" m["topictitle"]="title--102" c.JSON(200,m) //给map类型 }) r.Run() // listen and serve on 0.0.0.0:8080 }
如果你想输出字符串,可以这样写
r.GET("/", func(c *gin.Context) {
c.Writer.Write([]byte("firewdddeb"))
})
先讲这么些内容,不得不说gin真的非常好,非常棒,套用gin的话
Gin is a web framework written in Go (Golang). It features a martini-like API with much better performance, up to 40 times faster thanks to httprouter. If you need performance and good productivity, you will love Gin.