不知不覺,距離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.