1.先安裝Go對應的開源Swagger相關的庫
創(chuàng)新互聯(lián)建站是一家以網(wǎng)絡技術公司,為中小企業(yè)提供網(wǎng)站維護、成都做網(wǎng)站、成都網(wǎng)站建設、網(wǎng)站備案、服務器租用、主機域名、軟件開發(fā)、重慶小程序開發(fā)等企業(yè)互聯(lián)網(wǎng)相關業(yè)務,是一家有著豐富的互聯(lián)網(wǎng)運營推廣經(jīng)驗的科技公司,有著多年的網(wǎng)站建站經(jīng)驗,致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個面向全國乃至全球的業(yè)務窗口:建站聯(lián)系電話:18980820575
go get?github.com/swaggo/swag/cmd/swag
go get github.com/swaggo/gin-swagger
go get?github.com/swaggo/files
go get?github.com/alecthomas/template
2.驗證是否安裝成功:swag -v
3.針對接口寫入注解
// @Summary 獲取多個標簽
// @Tags 標簽
// @Produce? json
// @Param name query string false "標簽名稱" maxlength(100)
// @Param state query int false "狀態(tài)" Enums(0, 1) default(1)
// @Param page query int false "頁碼"
// @Param page_size query int false "每頁數(shù)量"
// @Success 200 {object} model.TagSwagger "成功"
// @Failure 400 {object} errcode.Error "請求錯誤"
// @Failure 500 {object} errcode.Error "內部錯誤"
// @Router /api/v1/tags [get]
func (t Tag) List(c *gin.Context) {
}
// @Summary 新增標簽
// @Tags 標簽
// @Produce? json
// @Param name body string true "標簽名稱" minlength(3) maxlength(100)
// @Param state body int false "狀態(tài)" Enums(0, 1) default(1)
// @Param created_by body string false "創(chuàng)建者" minlength(3) maxlength(100)
// @Success 200 {object} model.Tag "成功"
// @Failure 400 {object} errcode.Error "請求錯誤"
// @Failure 500 {object} errcode.Error "內部錯誤"
// @Router /api/v1/tags [post]
func (t Tag) Create(c *gin.Context) {
}
// @Summary 更新標簽
// @Tags 標簽
// @Produce? json
// @Param id path int true "標簽ID"
// @Param name body string false "標簽名稱" minlength(3) maxlength(100)
// @Param state body int false "狀態(tài) (0為未刪除、1為已刪除)" Enums(0, 1) default(1)
// @Param modified_by body string true "修改者" minlength(3) maxlength(100)
// @Success 200 {array} model.Tag "成功"
// @Failure 400 {object} errcode.Error "請求錯誤"
// @Failure 500 {object} errcode.Error "內部錯誤"
// @Router /api/v1/tags/{id} [put]
func (t Tag) Update(c *gin.Context) {
}
4.針對整個項目進行注解,直接在main方法寫入如下注解
//@title 項目名稱
//@version 1.0
//@description 這里是描述
func main() {
5.生成執(zhí)行 swag init
這時會在我項目的docs文件夾下面生成docs.go、swagger.json、swagger.yaml三個文件
6.要在routers中進行默認初始化和注冊對應的路由:
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
同時要引用 _"blog-service/docs" ,不然會報錯
7.查看接口文檔 :
8.ok,完成
Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽為“21世紀的C語言”。
Go語言在云計算、大數(shù)據(jù)、微服務、高并發(fā)領域應用應用非常廣泛。BAT大廠正在把Go作為新項目開發(fā)的首選語言。
Go語言能干什么?
1、服務端開發(fā):以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;
2、DevOps:運維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發(fā);
3、網(wǎng)絡編程:大量優(yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內置的 net/http包十分的優(yōu)秀;
4、Paas云平臺領域:Kubernetes和Docker Swarm等;
5、分布式存儲領域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區(qū)塊鏈領域:區(qū)塊鏈里面有兩個明星項目以太坊和fabric都使用Go語言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實現(xiàn)的;
8、爬蟲及大數(shù)據(jù):Go語言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。
1.Docker項目
網(wǎng)址為 。
介紹:Docker是一種操作系統(tǒng)層面的虛擬化技術,可以在操作系統(tǒng)和應用程序之間進行隔離,也可以稱之為容器。Docker可以在一臺物理服務器上快速運行一個或多個實例。例如,啟動一個Cent OS操作系統(tǒng),并在其內部命令行執(zhí)行指令后結束,整個過程就像自己在操作系統(tǒng)一樣高效。
2.golang項目
網(wǎng)址為 。
介紹:Go語言的早期源碼使用C語言和匯編語言寫成。從Go 1.5版本自舉后,完全使用Go語言自身進行編寫。Go語言的源碼對了解Go語言的底層調度有極大的參考意義,建議希望對Go語言有深入了解的讀者讀一讀。
3.Kubernetes項目
網(wǎng)址為 。
介紹:Google公司開發(fā)的構建于Docker之上的容器調度服務,用戶可以通過Kubernetes集群進行云端容器集群管理。
4.etcd項目
網(wǎng)址為 。
介紹:一款分布式、可靠的KV存儲系統(tǒng),可以快速進行云配置。
5.beego項目
網(wǎng)址為 。
介紹:beego是一個類似Python的Tornado框架,采用了RESTFul的設計思路,使用Go語言編寫的一個極輕量級、高可伸縮性和高性能的Web應用框架。
6.martini項目
網(wǎng)址為 。
介紹:一款快速構建模塊化的Web應用的Web框架。
7.codis項目
網(wǎng)址為 Labs/codis。
介紹:國產(chǎn)的優(yōu)秀分布式Redis解決方案。
8.delve項目
網(wǎng)址為 。
介紹:Go語言強大的調試器,被很多集成環(huán)境和編輯器整合。
為什么golang的開發(fā)效率高?/olgolang是一編譯型的強類型語言,它在開發(fā)上的高效率主要來自于后發(fā)優(yōu)勢,不用考慮舊有惡心的歷史,又有一個較高的工程視角。良好的避免了程序員因為“ { 需不需要獨占一行 ”這種革命問題打架,也解決了一部分趁編譯時間找產(chǎn)品妹妹搭訕的階級敵人。
它有自己的包管理機制,工具鏈成熟,從開發(fā)、調試到發(fā)布都很簡單方便;有反向接口、defer、coroutine等大量的syntactic sugar;編譯速度快,因為是強類型語言又有gc,只要通過編譯,非業(yè)務毛病就很少了;它在語法級別上支持了goroutine,這是大家說到最多的內容,這里重點提一下。首先,coroutine并不稀罕,語言并不能超越硬件、操作系統(tǒng)實現(xiàn)神乎其神的功能。golang可以做到事情,其他語言也可以做到,譬如c++,在boost庫里面自己就有的coroutine實現(xiàn)(當然用起來跟其他boost庫一樣惡心)。golang做的事情,是把這一套東西的使用過程簡化了,并且提供了一套channel的通信模式,使得程序員可以忽略諸如死鎖等問題。
goroutine的目的是描述并發(fā)編程模型。并發(fā)與并行不同,它并不需要多核的硬件支持,它不是一種物理運行狀態(tài),而是一種程序邏輯流程。它的主要目的不是利用多核提高運行效率,而是提供一種更容易理解、不容易出錯的語言來描述問題。
實際上golang默認就是運行在單OS進程上面的,通過指定環(huán)境變量GOMAXPROCS才能轉身跑在多OS進程上面。有人提到了的pomelo,開源本來是一件很不錯的事情,但是基于自己對callback hell的偏見,我一直持有這種態(tài)度:敢用nodejs寫大規(guī)模游戲服務器的人,都是真正的勇士 : ) 。
2、Erlang與Golang的coroutine有啥區(qū)別,coroutine是啥?
coroutine本質上是語言開發(fā)者自己實現(xiàn)的、處于user space內的線程,無論是erlang、還是golang都是這樣。需要解決沒有時鐘中斷;碰著阻塞式i\o,整個進程都會被操作系統(tǒng)主動掛起;需要自己擁有調度控制能力(放在并行環(huán)境下面還是挺麻煩的一件事)等等問題。那為啥要廢老大的勁自己做一套線程放user space里面呢?并發(fā)是服務器語言必須要解決的問題;system space的進程還有線程調度都太慢了、占用的空間也太大了。把線程放到user space的可以避免了陷入system call進行上下文切換以及高速緩沖更新,線程本身以及切換等操作可以做得非常的輕量。這也就是golang這類語言反復提及的超高并發(fā)能力,分分鐘給你開上幾千個線程不費力。
不同的是,golang的并發(fā)調度在i/o等易發(fā)阻塞的時候才會發(fā)生,一般是內封在庫函數(shù)內;erlang則更夸張,對每個coroutine維持一個計數(shù)器,常用語句都會導致這個計數(shù)器進行reduction,一旦到點,立即切換調度函數(shù)。
中斷介入程度的不同,導致erlang看上去擁有了preemptive scheduling的能力,而golang則是cooperative shceduling的。golang一旦寫出純計算死循環(huán),進程內所有會話必死無疑;要有大計算量少i\o的函數(shù)還得自己主動叫runtime.Sched()來進行調度切換。
3、golang的運行效率怎么樣?
我是相當反感所謂的ping\pong式benchmark,運行效率需要放到具體的工作環(huán)境下面考慮。
首先,它再快也是快不過c的,畢竟底下做了那么多工作,又有調度,又有gc什么的。那為什么在那些benchmark里面,golang、nodejs、erlang的響應效率看上去那么優(yōu)秀呢,響應快,并發(fā)強?并發(fā)能力強的原因上面已經(jīng)提到了,響應快是因為大量非阻塞式i\o操作出現(xiàn)的原因。這一點c也可以做到,并且能力更強,但是得多寫不少優(yōu)質代碼。
然后,針對游戲服務器這種高實時性的運行環(huán)境,GC所造成的跳幀問題確實比較麻煩,前面的大神 @達達 有比較詳細的論述和緩解方案,就不累述了 。隨著golang的持續(xù)開發(fā),相信應該會有非常大的改進。一是屏蔽內存操作是現(xiàn)代語言的大勢所趨,它肯定是需要被實現(xiàn)的;二是GC算法已經(jīng)相當?shù)某墒?,效率勉勉強強過得去;三是可以通過incremental的操作來均攤cpu消耗。
用這一點點效率損失換取一個更高的生產(chǎn)能力是不是值得呢?我覺得是值得的,硬件已經(jīng)很便宜了,人生苦短,讓自己的生活更輕松一點吧: )。
4、基于以上的論述,我認為采用go進行小范圍的MMORPG開發(fā)是可行的。
Revel Web開源框架
個高效的Go語言Web開發(fā)框架,?其思路完全來自 Java 的?Play Framework。
特點
熱編譯,簡單可選,同步(每個請求都創(chuàng)建自己的goroutine來處理。
Go語言Web框架:beego
一個用Go開發(fā)的應用框架,思路來自于tornado,路由設計來源于sinatra。
支持特性
MVC;
REST;
智能路由;
日志調試;
配置管理;
模板自動渲染;
layout設計;
中間件插入邏輯;
方便的JSON/XML服務;
第一個:Beego框架
Beego框架是astaxie的GOWeb開發(fā)的開源框架。Beego框架最大的特點是由八個大的基礎模塊組成,八大基礎模塊的特點是可以根據(jù)自己的需要進行引入,模塊相互獨立,模塊之間耦合性低。
相應的Beego的缺點就是全部使用時比較臃腫,通過bee工具來構建項目時,直接生成項目目錄和耦合關系,從而會導致在項目開發(fā)過程中受制性較大。
第二個:Gin框架
Gin是一個GOlang的微框架,封裝比較優(yōu)雅,API友好,源碼注釋比較明確,已經(jīng)發(fā)布了1.0版本;具有快速靈活、容錯方便等特點,其實對于golang而言,web框架的依賴遠比Python、Java更小。
目前在很多使用golang的中小型公司中進行業(yè)務開發(fā),使用Gin框架的很多,大家如果想使用golang進行熟練Web開發(fā),可以多關注一下這個框架。
第三個:Iris框架
Iris框架在其官方網(wǎng)站上被描述為GO開發(fā)中最快的Web框架,并給出了多框架和多語言之前的性能對比。目前在github上,Iris框架已經(jīng)收獲了14433個star和1493個fork,可見是非常受歡迎的。
在實際開發(fā)中,Iris框架與Gin框架的學習曲線幾乎相同,所以掌握了Gin就可以輕松掌握Iris框架。
第四個:Echo框架
也是golang的微型Web框架,其具備快速HTTP路由器、支持擴展中間件,同時還支持靜態(tài)文件服務、Websocket以及支持制定綁定函數(shù),制定相應渲染函數(shù),并允許使用任意的HTML模版引擎。