結合 gin+gorm+go-Redis 寫一個基礎 API(下篇)

sai0556發表於2020-06-15

前兩篇我們已經完成了gin+gorm部分,今天我們來補充go-Redis,並進行測試。

整合go-Redis

我們把Redis相關也放在model下面,使用的是常見的go-redis:

// redis.go
package model

import (
    "fmt"

    "github.com/spf13/viper"
    "github.com/go-redis/redis"
)

var RedisClient *redis.Client

func RedisInit() {
    RedisClient = redis.NewClient(&redis.Options{
        Addr:     fmt.Sprintf("%s:%s", viper.GetString("redis.host"), viper.GetString("redis.port")),
        Password: viper.GetString("redis.auth"),
        DB:       0,
    })

    _, err := RedisClient.Ping().Result()
    if err != nil {
        panic("redis ping error")
    }
}

然後在連線Mysql的前面加入初始化redis連線的操作即可。

    // redis 初始化
    model.RedisInit()

你可以做一些簡單操作,或者在redis.go做一些常用方法的封裝,比較簡單,就不贅述了,更多go-redis操作可見:

測試

新建測試目錄test,建立三個檔案:

// index.go
package test

import (
    "net/http"
    "io/ioutil"
)

func Sum(a int, b int) int {
    return a+b
}

func HttpIndex() []byte {
    resp, err := http.Get("http://127.0.0.1:8080/")
    if err != nil && resp.StatusCode != 200 {
        panic(err)
    }
    //關閉連線
    defer resp.Body.Close()
    //讀取報文中所有內容
    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        panic(err)
    }
    //輸出內容
    return body
}
// index_test.go
package test

import (
    "testing"
    "encoding/json"

    "local.com/sai0556/gin-frame/controller"
)

func TestSum(t *testing.T)  {
    ret := Sum(2, 7)
    if ret != 9 {
        t.Error("Expected 9 ~wow~")
    }
}

func TestHttpIndex(t *testing.T)  {
    data := HttpIndex()

    target := controller.Response{}
    // json轉換
    if err := json.Unmarshal(data, &target); err != nil {
        t.Error(target)
    }

    ret := controller.Response{0, "success", nil}

    if target != ret {
        t.Error("json error")
    }
}
// index_bench_test.go
package test

import (
    "testing"
)

func BenchmarkSum(b *testing.B)  {
    for i := 0; i < b.N; i++ { 
        Sum(2, 7)
    }
}

func BenchmarkHttpIndex(b *testing.B)  {

    for i := 0; i < b.N; i++ { 
        HttpIndex()
    }
}

私以為go的測試相比其他語言還是比較簡潔的,這裡需要注意幾點:

  1. 測試檔案以_test結尾
  2. 基礎測試方法名要以TEST開頭

執行起來,看一下:

測試結果

對圖中做一些說明:

// -run="none"不執行基礎單元測試,bench指定基準測試方法
go test -v -run="none" -bench="Bench*"

// 最後一個BenchmarkHttpIndex-4後面測試結果表示
一共執行了11010次,每次執行耗時107392ns(~0.107ms)

test標準庫


結後語

文章很基礎,主要是介紹了結合了gin+gorm+go-redis,並寫了簡單的測試,是相對基礎的文章,但足以應付一些api介面了。希望對你有幫助,有問題可留言或私信。

點選檢視專案DEMO

本作品採用《CC 協議》,轉載必須註明作者和本文連結

收藏前不妨點個贊試試!!!
分享開發知識,歡迎交流。qq957042781,公眾號:愛好歷史的程式設計師。
點選直達個人部落格

相關文章