Skip to content

Commit 3d0d368

Browse files
committed
chore: quick update fix/version at 2025-10-22 18:36:17
1 parent 0b9dfec commit 3d0d368

File tree

22 files changed

+197
-298
lines changed

22 files changed

+197
-298
lines changed

cmds/protoc-gen-go-errors2/internal/gen.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.Generated
9393
jen.Id("Message"): jen.Lit(rr),
9494
})
9595
genFile.Var().Id("_").Op("=").
96-
Qual("github.com/pubgo/funk/v2/errors", "RegisterErrCodes").
96+
Qual("github.com/pubgo/funk/v2/errors/errorcodes", "RegisterErrCodes").
9797
Call(jen.Id(errCodeName)).Line()
9898
}
9999
}

env/env.go

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package env
22

33
import (
44
"fmt"
5-
"log/slog"
65
"os"
76
"strconv"
87
"strings"
@@ -21,11 +20,12 @@ import (
2120
const Name = "env"
2221

2322
func Set(key, value string) result.Error {
24-
return result.ErrOf(os.Setenv(keyHandler(key), value)).Log(func(e *zerolog.Event) {
25-
e.Str("key", key)
26-
e.Str("value", value)
27-
e.Str(logfields.Msg, "env_set_error")
28-
})
23+
return result.ErrOf(os.Setenv(keyHandler(key), value)).
24+
Log(func(e *zerolog.Event) {
25+
e.Str("key", key)
26+
e.Str("value", value)
27+
e.Str(logfields.Msg, "env_set_error")
28+
})
2929
}
3030

3131
func MustSet(key, value string) { Set(key, value).Must() }
@@ -38,7 +38,7 @@ func Get(names ...string) string {
3838

3939
func MustGet(names ...string) string {
4040
val := Get(names...)
41-
assert.If(val == "", "env not found, names=%q", names)
41+
assert.If(val == "", "env value not set, names=%q", names)
4242
return val
4343
}
4444

@@ -70,7 +70,7 @@ func GetBool(names ...string) bool {
7070

7171
v, err := strconv.ParseBool(val)
7272
if err != nil {
73-
slog.Error(fmt.Sprintf("env: failed to parse string to bool, keys=%q value=%s err=%v", names, val, err))
73+
getLog().Error("failed to parse string to bool", "keys", names, "value", val, "err", err)
7474
return false
7575
}
7676

@@ -86,7 +86,7 @@ func GetInt(names ...string) int {
8686

8787
v, err := strconv.Atoi(val)
8888
if err != nil {
89-
slog.Error(fmt.Sprintf("env: failed to parse string to int, keys=%q value=%s err=%v", names, val, err))
89+
getLog().Error("failed to parse string to int", "keys", names, "value", val, "err", err)
9090
return -1
9191
}
9292

@@ -102,7 +102,7 @@ func GetFloat(names ...string) float64 {
102102

103103
v, err := strconv.ParseFloat(val, 64)
104104
if err != nil {
105-
slog.Error(fmt.Sprintf("env: failed to parse string to float, keys=%q value=%s err=%v", names, val, err))
105+
getLog().Error("failed to parse string to float", "keys", names, "value", val, "err", err)
106106
return -1
107107
}
108108

@@ -112,19 +112,21 @@ func GetFloat(names ...string) float64 {
112112
func Lookup(key string) (string, bool) { return os.LookupEnv(keyHandler(key)) }
113113

114114
func Delete(key string) result.Error {
115-
return result.ErrOf(os.Unsetenv(keyHandler(key))).Log(func(e *zerolog.Event) {
116-
e.Str("key", key)
117-
e.Str(logfields.Msg, "env_delete_error")
118-
})
115+
return result.ErrOf(os.Unsetenv(keyHandler(key))).
116+
Log(func(e *zerolog.Event) {
117+
e.Str("key", key)
118+
e.Str(logfields.Msg, "env_delete_error")
119+
})
119120
}
120121

121122
func MustDelete(key string) { Delete(key).Must() }
122123

123124
func Expand(value string) result.Result[string] {
124-
return result.Wrap(envsubst.String(value)).Log(func(e *zerolog.Event) {
125-
e.Str("value", value)
126-
e.Str(logfields.Msg, "env_expand_error")
127-
})
125+
return result.Wrap(envsubst.String(value)).
126+
Log(func(e *zerolog.Event) {
127+
e.Str("value", value)
128+
e.Str(logfields.Msg, "env_expand_error")
129+
})
128130
}
129131

130132
func Map() map[string]string {
@@ -150,13 +152,22 @@ func LoadFiles(files ...string) (r result.Error) {
150152
return
151153
}
152154

155+
var needReloadEnv bool
153156
for _, file := range files {
154-
data := result.Wrap(os.ReadFile(file)).Unwrap(&r)
157+
data := result.Wrap(os.ReadFile(file)).
158+
Log(func(e *zerolog.Event) {
159+
e.Str(logfields.Msg, fmt.Sprintf("failed to read file:%s", file))
160+
}).
161+
Unwrap(&r)
155162
if r.IsErr() {
156163
return
157164
}
158165

159-
dataMap := result.Wrap(godotenv.UnmarshalBytes(data)).Unwrap(&r)
166+
dataMap := result.Wrap(godotenv.UnmarshalBytes(data)).
167+
Log(func(e *zerolog.Event) {
168+
e.Str(logfields.Msg, fmt.Sprintf("failed to parse env file:%s", file))
169+
}).
170+
Unwrap(&r)
160171
if r.IsErr() {
161172
return
162173
}
@@ -169,10 +180,15 @@ func LoadFiles(files ...string) (r result.Error) {
169180
if Set(k, v).Catch(&r) {
170181
return
171182
}
183+
184+
needReloadEnv = true
172185
}
173186
}
174187

175-
loadEnv()
188+
if needReloadEnv {
189+
loadEnv()
190+
}
191+
176192
return
177193
}
178194

env/reload.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"strings"
88

99
"github.com/pubgo/funk/v2/assert"
10-
"github.com/pubgo/funk/v2/log/logfields"
1110
)
1211

1312
func Reload() {
@@ -17,7 +16,7 @@ func Reload() {
1716
// 环境变量处理, key转大写, 同时把`-./`转换为`_`
1817
// a-b=>a_b, a.b=>a_b, a/b=>a_b
1918
func loadEnv() {
20-
var logger = slog.With(slog.String(logfields.Module, Name))
19+
var logger = getLog()
2120
logger.Info("reload env")
2221

2322
for _, env := range os.Environ() {

env/util.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package env
22

33
import (
4+
"log/slog"
45
"strings"
56

67
"github.com/ettle/strcase"
8+
"github.com/pubgo/funk/v2/log/logfields"
79
)
810

911
var trim = strings.TrimSpace
@@ -21,3 +23,7 @@ func keyHandler(key string) string {
2123
key = strings.ReplaceAll(replacer.ToSNAKE(key), "__", "_")
2224
return strings.ToUpper(trim(key))
2325
}
26+
27+
func getLog() *slog.Logger {
28+
return slog.With(slog.String(logfields.Module, Name))
29+
}

errors/aaa.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ type Tags = errinter.Tags
99
type Tag = errinter.Tag
1010
type ErrIs = errinter.ErrIs
1111
type ErrAs = errinter.ErrAs
12-
type ErrUnwrap = errinter.ErrUnwrap
12+
type ErrUnwrapper = errinter.ErrUnwrapper
1313
type Error = errinter.Error
1414
type ErrorProto = errinter.ErrorProto
1515
type GRPCStatus = errinter.GRPCStatus

errors/err_code.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import (
77
"fmt"
88
"strings"
99

10-
"github.com/pubgo/funk/v2/errors/errinter"
11-
"github.com/pubgo/funk/v2/generic"
12-
"github.com/pubgo/funk/v2/proto/errorpb"
13-
"github.com/pubgo/funk/v2/stack"
1410
"github.com/samber/lo"
1511
"google.golang.org/protobuf/proto"
1612
"google.golang.org/protobuf/types/known/structpb"
13+
14+
"github.com/pubgo/funk/v2/errors/errinter"
15+
"github.com/pubgo/funk/v2/generic"
16+
"github.com/pubgo/funk/v2/proto/errorpb"
1717
)
1818

1919
func NewCodeErrWithMap(code *errorpb.ErrCode, details ...map[string]any) error {
@@ -91,13 +91,10 @@ func WrapCode(err error, code *errorpb.ErrCode) error {
9191
}
9292

9393
code.Details = append(code.Details, MustProtoToAny(ParseErrToPb(err)))
94-
return &ErrWrap{
95-
err: &ErrCode{pb: code, err: errors.New(code.Message)},
96-
pb: &errorpb.ErrWrap{
97-
Caller: stack.Caller(1).String(),
98-
Error: MustProtoToAny(code),
99-
},
100-
}
94+
return newErrWrap(
95+
&ErrCode{pb: code, err: errors.New(code.Message)},
96+
Tags{Kv("msg", err.Error())},
97+
)
10198
}
10299

103100
var (
@@ -126,10 +123,9 @@ func (t *ErrCode) Is(err error) bool {
126123
return true
127124
}
128125

129-
var check = func(err2 *ErrCode) bool {
130-
return err2.pb.Code == t.pb.Code && err2.pb.Name == t.pb.Name
126+
var check = func(errCode *ErrCode) bool {
127+
return errCode.pb.Code == t.pb.Code && errCode.pb.Name == t.pb.Name
131128
}
132-
133129
if err1, ok := err.(*ErrCode); ok && check(err1) {
134130
return true
135131
}

errors/err_msg.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"github.com/pubgo/funk/v2/errors/errinter"
1010
"github.com/pubgo/funk/v2/generic"
1111
"github.com/pubgo/funk/v2/proto/errorpb"
12-
"github.com/pubgo/funk/v2/stack"
1312
"github.com/samber/lo"
1413
"google.golang.org/protobuf/proto"
1514
)
@@ -39,13 +38,10 @@ func WrapMsg(err error, msg *errorpb.ErrMsg) error {
3938
msg.Id = lo.ToPtr(getErrorId(err))
4039
}
4140

42-
return &ErrWrap{
43-
err: &ErrMsg{pb: msg, err: handleGrpcError(err)},
44-
pb: &errorpb.ErrWrap{
45-
Caller: stack.Caller(1).String(),
46-
Error: MustProtoToAny(msg),
47-
},
48-
}
41+
return newErrWrap(
42+
&ErrMsg{pb: msg, err: handleGrpcError(err)},
43+
Tags{Kv("msg", err.Error())},
44+
)
4945
}
5046

5147
var (

errors/err_wrap.go

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,57 @@ import (
55
"encoding/json"
66
"fmt"
77

8+
"github.com/samber/lo"
9+
"google.golang.org/protobuf/proto"
10+
811
"github.com/pubgo/funk/v2/errors/errinter"
912
"github.com/pubgo/funk/v2/proto/errorpb"
10-
"google.golang.org/protobuf/proto"
13+
"github.com/pubgo/funk/v2/stack"
1114
)
1215

1316
var (
1417
_ Error = (*ErrWrap)(nil)
1518
_ fmt.Formatter = (*ErrWrap)(nil)
1619
)
1720

18-
type ErrWrap struct {
19-
err error
20-
id string
21-
pb *errorpb.ErrWrap
21+
func newErrWrapStack(err error, tags Tags) *ErrWrap {
22+
if err == nil {
23+
return nil
24+
}
25+
26+
pb := &errorpb.ErrWrap{
27+
Caller: stack.Caller(2).String(),
28+
Stacks: lo.Map(getStack(), func(item *stack.Frame, index int) string { return item.String() }),
29+
Error: MustProtoToAny(ParseErrToPb(err)),
30+
Tags: tags.ToMap(),
31+
Id: lo.ToPtr(getErrorId(err)),
32+
}
33+
34+
return &ErrWrap{err: err, pb: pb}
2235
}
2336

24-
func (e *ErrWrap) ID() string {
25-
if e.id != "" {
26-
return e.id
37+
func newErrWrap(err error, tags Tags, callers ...int) *ErrWrap {
38+
if err == nil {
39+
return nil
40+
}
41+
42+
pb := &errorpb.ErrWrap{
43+
Caller: stack.Caller(2 + lo.FirstOrEmpty(callers)).String(),
44+
Error: MustProtoToAny(ParseErrToPb(err)),
45+
Tags: tags.ToMap(),
46+
Id: lo.ToPtr(getErrorId(err)),
2747
}
2848

29-
e.id = getErrorId(e.err)
30-
return e.id
49+
return &ErrWrap{err: handleGrpcError(err), pb: pb}
3150
}
32-
func (e *ErrWrap) Proto() proto.Message {
33-
return e.pb
51+
52+
type ErrWrap struct {
53+
err error
54+
pb *errorpb.ErrWrap
3455
}
56+
57+
func (e *ErrWrap) ID() string { return e.pb.GetId() }
58+
func (e *ErrWrap) Proto() proto.Message { return e.pb }
3559
func (e *ErrWrap) Format(f fmt.State, verb rune) { strFormat(f, verb, e) }
3660
func (e *ErrWrap) Unwrap() error { return e.err }
3761
func (e *ErrWrap) Kind() string { return "err_wrap" }

errors/errinter/aaa.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"encoding/json"
55
"fmt"
66

7-
"golang.org/x/xerrors"
87
"google.golang.org/grpc/status"
98
"google.golang.org/protobuf/proto"
109
)
@@ -17,9 +16,9 @@ type Error interface {
1716
MarshalJSON() ([]byte, error)
1817
}
1918

20-
type ErrUnwrap = xerrors.Wrapper
21-
type Formatter = xerrors.Formatter
22-
type Printer = xerrors.Printer
19+
type ErrUnwrapper interface {
20+
Unwrap() error
21+
}
2322

2423
type ErrorProto interface {
2524
error

errors/errinter/utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func GetErrorId(err error) string {
5151
}
5252

5353
func Unwrap(err error) error {
54-
u, ok := err.(ErrUnwrap)
54+
u, ok := err.(ErrUnwrapper)
5555
if !ok {
5656
return nil
5757
}

0 commit comments

Comments
 (0)