2025年8月5日火曜日

go-redis を v9 にアップグレードする方法

go-redis を v9 にアップグレードする方法

概要

v9 からインストール時のパスが変わっているので go get -u などしてもアップグレードされません
直接 go.mod ファイルなどを編集することでアップグレードできます

環境

  • macOS 15.5
  • golang 1.24.5
  • go-redis 9.11

go-redis v9 のインストール

  • go get github.com/redis/go-redis/v9

go-redis v6 のアンインストール

  • vim go.mod
require (
	github.com/beego/beego/v2 v2.3.8
	github.com/stretchr/testify v1.10.0
	golang.org/x/crypto v0.40.0
)

もともとあった github.com/go-redis/redis v6.15.9+incompatible の行を削除します

コード内の import 文の修正

"github.com/go-redis/redis"

の箇所を

"github.com/redis/go-redis/v9"

に書き換えます

コードの修正

以下主な修正点を紹介します
基本的には各メソッドで何かしらのコンテキストを受け取る形式になっているのでそこを修正します

  • context の import
import (
	"context"
	"github.com/redis/go-redis/v9"
)
  • インタフェースの修正
type RedisClient interface {
	LRange(ctx context.Context, key string, start, stop int64) *redis.StringSliceCmd
	LPush(ctx context.Context, key string, values ...interface{}) *redis.IntCmd
	Del(ctx context.Context, keys ...string) *redis.IntCmd
	Get(ctx context.Context, key string) *redis.StringCmd
	Set(ctx context.Context, key string, value interface{}, expiration time.Duration) *redis.StatusCmd
	Close() error
}
  • 各メソッドの修正
ctx := mc.Ctx.Request.Context()
ret, err := cli.Del(ctx, key).Result()
  • テスト用のモックの修正
func (m *MockRedisClient) Del(ctx context.Context, keys ...string) *redis.IntCmd {
	for _, key := range keys {
		delete(m.data, key)
	}
	return redis.NewIntResult(1, nil)
}

動作確認

あとはテストなどを実行すれば OK です

  • go fmt ./...
  • go test ./...
  • go build

最後に

golang の場合非互換のバージョンアップがある場合は新規にパスを切るケースがほとんどなどでそれを知らずに放置しておくと最新バージョンからかなり遅れることになってしまいます
パスを新しくしたらあとは go get -u && go mod tidy でバージョンアップすることができます

参考サイト

0 件のコメント:

コメントを投稿