Gin(一):Hello

youngxhui · · 656 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# 什么是 Gin > Gin 是一个用 Golang 写的 http web 框架。 这是来自 Gin [Github](https://github.com/gin-gonic/gin) 上的描述。 # 开发环境 - GoLand 2019.2 EAP - GoLang 1.11.5 - 采用 Go Modules 进行管理 # 快速入门 用 `GoLand` 新建项目的时候,我们选择 `Go Modules(vgo)` ,填写我们的项目地址和项目名称,我们命名为 `GinHello` 。 ![新建项目](https://island-hexo.oss-cn-beijing.aliyuncs.com/gin_create_new_project.jpg) 点击 `Create` ,此时 `Goland` 为我们生成了项目目录,`Go` 项目的目录永远是那么的简单,比 `Java` 的 `Maven` 或者 `Gradle` 生成的项目目录简单多了。 ```html GinHello | |-go.mod ``` 对,就是一个文件 ,一个 `Go module` 文件。`go mod` 是 `Go` 官方引入的一个依赖管理工具。 ## 添加依赖 通过 `go mod` 文件进行依赖的。 `require github.com/gin-gonic/gin v1.4.0` 我们把上面的依赖进行添加到 `go module` 中, `goLand` 会自动帮我们进行依赖的下载和管理。 ## Hello Gin 当完成依赖的添加,就可以开始写代码了。 新建一个 `main.go` 文件。 ```go package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.Run() } ``` `Gin` 只需要两行代码就可以把我们的服务跑起来。 我们只要点击运行,项目便会启动一个 `8080` 端口,打开浏览器 `localhost:8080` 我们便可以看到页面上提示出 `404 page not found` ,这是因为我们的根路由上并没有返回任何结果。同时我们可以在控制台上看到一些打印信息,其中就包括我们刚刚访问根路由的端口。 ## 产生接口 项目已经启动了,那么如何返回一个接口呢? 通过 `router` 的 `Handle` 进行配置我们返回的参数。 ```go // 省略代码 // 添加 Get 请求路由 router.GET("/", func(context *gin.Context) { context.String(http.StatusOK, "hello gin") }) // 省略代码 ``` 此时我们重启项目,重新访问页面 `localhost:808`,此刻的页面上已经显示了 `hello gin`。 同样,我们还可以进行 `POST`,`PUT`,`DELETE`等请求方式。 ## 单元测试 单元测试是项目不能缺少的模块,也是保障项目可以正常运行的重要依赖。下面就对 Gin 进行单元测试。 为了方便单元测试,我们首先要对我们的项目进行一下抽取。 新建立一个文件夹叫做 `initRouter` 建立 `go` 文件 `initRouter.go` ```go package initRouter import ( "github.com/gin-gonic/gin" "net/http" ) func SetupRouter() *gin.Engine { router := gin.Default() // 添加 Get 请求路由 router.GET("/", func(context *gin.Context) { context.String(http.StatusOK, "hello gin") }) return router } ``` 同时修改 `main.go` ```go package main import ( "GinHello/initRouter" ) func main() { router := initRouter.SetupRouter() _ = router.Run() } ``` 完成了项目测试的初步建立。 建立 `test` 目录, `golang` 的单元测试都是以 `_test` 结尾,建立 `index_test.go` 文件。 ```go package test import ( "GinHello/initRouter" "github.com/stretchr/testify/assert" "net/http" "net/http/httptest" "testing" ) func TestIndexGetRouter(t *testing.T) { router := initRouter.SetupRouter() w := httptest.NewRecorder() req, _ := http.NewRequest(http.MethodGet, "/", nil) router.ServeHTTP(w, req) assert.Equal(t, http.StatusOK, w.Code) assert.Equal(t, "hello gin", w.Body.String()) } ``` 通过 `assert` 进行断言,来判断返回状态码和返回值是否与代码中的值一致。 此时的项目目录为: ```html GinHello | |-initRouter | |-initRouter.go | |-test | |-index_test.go | |-main.go |-go.mod |-go.sum ``` 运行单元测试,控制台打印出单元测试结果。 > --- PASS: TestIndexGetRouter (0.02s) > PASS # 总结 通过简单的搭建一个 Gin 项目,可以看到 Go 语言搭建一个 Http 服务器很简单,也很方便,零配置即可完成项目并运行起来。 # 本章节代码 [Github](https://github.com/youngxhui/GinHello)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

656 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传