基于gin的golang web开发:Gin技术拾遗

本文是对前几篇文章的一些补充,主要包含两部分:单元测试和实际项目中使用路由的小问题。

拾遗1:单元测试

Golang单元测试要求代码文件以_test结尾,单元测试方法以Test开头,参数为*testing.T类型。如下是一个计算hash值的工具包和对应的单元测试。前端

hashUtils.gogit

package utils

import (
	"crypto/md5"
	"crypto/sha1"
	"fmt"
)

func Md5(str string) string {
	data := []byte(str)
	has := md5.Sum(data)
	return fmt.Sprintf("%X", has)
}

func SHA1(data []byte) []byte {
	h := sha1.New()
	h.Write(data)
	return h.Sum(nil)
}

hashUtils_test.gogithub

package utils

import (
	"fmt"
	"testing"
)

func TestMd5(t *testing.T) {
	content := "123456"
	md5 := Md5(content)

	if "E10ADC3949BA59ABBE56E057F20F883E" != md5 {
		t.Errorf("md5 failed")
	}
}

func TestSHA1(t *testing.T) {
	content := "123456"
	sha1 := fmt.Sprintf("%x", SHA1([]byte(content)))

	if "7c4a8d09ca3762af61e59520943dc26494f8941b" != sha1 {
		t.Errorf("sha1 failed")
	}
}

除了测试这种逻辑代码咱们还须要测试HTTP的请求响应。Gin推荐使用net/http/httptest测试HTTP相关的代码。golang

启动一个Gin服务器main.goweb

package main

func setupRouter() *gin.Engine {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.String(200, "pong")
	})
	return r
}

func main() {
	r := setupRouter()
	r.Run(":8080")
}

单元测试main_test.go服务器

package main

import (
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestPingRoute(t *testing.T) {
	router := setupRouter()

	w := httptest.NewRecorder()
	req, _ := http.NewRequest("GET", "/ping", nil)
	router.ServeHTTP(w, req)

	assert.Equal(t, 200, w.Code)
	assert.Equal(t, "pong", w.Body.String())
}

拾遗2:路由

先看代码工具

userRouter := router.Group(`users`)
{
	userRouter.GET(`/`, userHandler.UserList)
}

咱们声明了路由/users/,这是一个Web Api,传入参数的url大概是这样的/users/?pageIndex=1&pageSize=10。用户访问/users?pageIndex=1&pageSize=10时也能正常返回数据,这是由于Gin帮咱们作了一次301跳转,问题就出在这里。咱们的路由是Web Api用户多是JS前端,也多是其余的业务系统。若是用户不支持301跳转呢?单元测试

其实咱们只要在增长一个空路径路由就能够解决问题。测试

userRouter := router.Group(`users`)
{
	userRouter.GET(``, userHandler.UserList)
	userRouter.GET(`/`, userHandler.UserList)
}

如今无论用户访问/users/?pageIndex=1&pageSize=10仍是访问/users?pageIndex=1&pageSize=10都会获得正确的结果。url

文章出处:基于gin的golang web开发:Gin技术拾遗

相关文章
相关标签/搜索