網站首頁 編程語言 正文
go語言web框架挺多的,各有各的特點和風格。我之所以在項目中使用gin框架,是因為項目一開始是用的martini,一個設計得很好的框架,但是存在一個比較嚴重的問題,就是大量使用反射使用太多導致效率過低(這個問題也導致了程序在訪問量暴漲時內存上漲過快的問題),而且這個框架在去年就沒有人維護了,而作者推薦使用風格很相近的gin框架,大概看了一下,風格確實差不多,而且效率很高,于是就用了gin。至于其它的框架,了解得比較多的是beego,項目中也使用了它的子項目beelog,但是由于我做的項目是偏向于應用服務,而不是網站服務,它的風格更適合網站服務,因此就沒有選擇它。
貼一下這兩個框架的github倉庫,martini就不推薦了
下面貼一下用gin搭建一個簡易的應用服務的代碼片段,非常的簡單,看一下代碼注釋也很容易理解。
package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) func main() { gin.SetMode(gin.DebugMode) //全局設置環境,此為開發環境,線上環境為gin.ReleaseMode router := gin.Default() //獲得路由實例 //添加中間件 router.Use(Middleware) //注冊接口 router.GET("/simple/server/get", GetHandler) router.POST("/simple/server/post", PostHandler) router.PUT("/simple/server/put", PutHandler) router.DELETE("/simple/server/delete", DeleteHandler) //監聽端口 http.ListenAndServe(":8005", router) } func Middleware(c *gin.Context) { fmt.Println("this is a middleware!") } func GetHandler(c *gin.Context) { value, exist := c.GetQuery("key") if !exist { value = "the key is not exist!" } c.Data(http.StatusOK, "text/plain", []byte(fmt.Sprintf("get success! %s\n", value))) return } func PostHandler(c *gin.Context) { type JsonHolder struct { Id int `json:"id"` Name string `json:"name"` } holder := JsonHolder{Id: 1, Name: "my name"} //若返回json數據,可以直接使用gin封裝好的JSON方法 c.JSON(http.StatusOK, holder) return } func PutHandler(c *gin.Context) { c.Data(http.StatusOK, "text/plain", []byte("put success!\n")) return } func DeleteHandler(c *gin.Context) { c.Data(http.StatusOK, "text/plain", []byte("delete success!\n")) return }
用curl命令訪問這些接口可以得到對應的返回結果
程序的日志輸出
這里只是快速上手的一些方法,作為一個web服務框架,功能當然非常強大,這就需要在實際使用中慢慢挖掘和深究了。
原文鏈接:https://blog.csdn.net/KeKeQiaoKeLi/article/details/53038557
相關推薦
- 2022-09-03 Python實現求解最大公約數的五種方法總結_python
- 2022-10-31 C#實現HTTP訪問類HttpHelper的示例詳解_C#教程
- 2022-07-09 常見的dos命令
- 2022-05-08 繼docker之后podman容器技術崛起_docker
- 2022-03-16 react實現todolist的增刪改查詳解_React
- 2022-06-18 Elasticsearches通過坐標位置實現對附近人的搜索_其它綜合
- 2022-04-28 Python?常用的print輸出函數和input輸入函數_python
- 2022-05-21 React?組件中的state和setState()你知道多少_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支