From 6beb1daf3e9e1b099cc2b6cfd7da36332d82447e Mon Sep 17 00:00:00 2001 From: fmyAgi7 Date: Mon, 19 Jan 2026 10:55:13 +0800 Subject: [PATCH 1/2] feat: improve message formatting in NewCodeErrWithMsg function --- errors/err_code.go | 5 ++++- errors/z_err_code_test.go | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/errors/err_code.go b/errors/err_code.go index 819fdec4..01ccb6c6 100644 --- a/errors/err_code.go +++ b/errors/err_code.go @@ -12,6 +12,8 @@ import ( "github.com/pubgo/funk/proto/errorpb" "github.com/pubgo/funk/stack" "github.com/samber/lo" + "golang.org/x/text/cases" + "golang.org/x/text/language" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/structpb" ) @@ -45,7 +47,8 @@ func NewCodeErrWithMsg(code *errorpb.ErrCode, msg string, details ...proto.Messa return nil } - code.Message = strings.ToTitle(strings.TrimSpace(msg)) + caser := cases.Title(language.English) + code.Message = caser.String(strings.TrimSpace(msg)) return NewCodeErr(code, details...) } diff --git a/errors/z_err_code_test.go b/errors/z_err_code_test.go index a251c28e..65e8c202 100644 --- a/errors/z_err_code_test.go +++ b/errors/z_err_code_test.go @@ -16,3 +16,13 @@ func TestErrCode(t *testing.T) { t.Log(errors.As(err1, testcodepb.TestErrCodeDbConn)) } + +func TestNewCodeErrWithMsg(t *testing.T) { + err1 := errors.NewCodeErrWithMsg(testcodepb.TestErrCodeDbConn, "hello world") + var err2 *errors.ErrCode + t.Log(errors.As(err1, &err2)) + if err2.Error() != "Hello World" { + t.Fatal("message not match") + } + t.Log(err2.Error()) +} From 4e5f2405c7468ecbfefb4be1b156ebb3f1adb5f7 Mon Sep 17 00:00:00 2001 From: fmyAgi7 Date: Mon, 19 Jan 2026 11:09:38 +0800 Subject: [PATCH 2/2] fix: reuse title casing in NewCodeErrWithMsg function --- errors/err_code.go | 5 +++-- errors/z_err_code_test.go | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/errors/err_code.go b/errors/err_code.go index 01ccb6c6..f976513e 100644 --- a/errors/err_code.go +++ b/errors/err_code.go @@ -41,14 +41,15 @@ func NewCodeErrWithMap(code *errorpb.ErrCode, details ...map[string]any) error { return NewCodeErr(code, data) } +var titleCaser = cases.Title(language.English) + func NewCodeErrWithMsg(code *errorpb.ErrCode, msg string, details ...proto.Message) error { code = cloneAndCheck(code) if code == nil { return nil } - caser := cases.Title(language.English) - code.Message = caser.String(strings.TrimSpace(msg)) + code.Message = titleCaser.String(strings.TrimSpace(msg)) return NewCodeErr(code, details...) } diff --git a/errors/z_err_code_test.go b/errors/z_err_code_test.go index 65e8c202..1503fafd 100644 --- a/errors/z_err_code_test.go +++ b/errors/z_err_code_test.go @@ -20,7 +20,9 @@ func TestErrCode(t *testing.T) { func TestNewCodeErrWithMsg(t *testing.T) { err1 := errors.NewCodeErrWithMsg(testcodepb.TestErrCodeDbConn, "hello world") var err2 *errors.ErrCode - t.Log(errors.As(err1, &err2)) + if !errors.As(err1, &err2) { + t.Fatal("errors.As should have returned true") + } if err2.Error() != "Hello World" { t.Fatal("message not match") }