Skip to content

Commit ebc6fb5

Browse files
committed
refactor(vars): replace expvar with atomic types and fix Result logic
1 parent 54bd373 commit ebc6fb5

File tree

4 files changed

+28
-47
lines changed

4 files changed

+28
-47
lines changed

component/gormclient/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (c *Client) Ping() error {
2323
return _db.Ping()
2424
}
2525

26-
func (c *Client) Vars() vars.Value {
26+
func (c *Client) Vars() vars.Func {
2727
return func() interface{} {
2828
_db, err := c.DB.DB()
2929
if err != nil {

v2/result/result.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,14 @@ func (r Result[T]) Log(events ...func(e *zerolog.Event)) Result[T] {
116116
}
117117

118118
func (r Result[T]) Map(fn func(T) T) Result[T] {
119-
if r.IsOK() {
119+
if r.IsErr() {
120120
return r
121121
}
122122
return OK(fn(r.getValue()))
123123
}
124124

125125
func (r Result[T]) FlatMap(fn func(T) Result[T]) Result[T] {
126-
if r.IsOK() {
126+
if r.IsErr() {
127127
return r
128128
}
129129
return fn(r.getValue())

vars/vars.go

Lines changed: 24 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"strconv"
99
"strings"
1010
"sync"
11+
"time"
1112

1213
"github.com/rs/xid"
1314
"go.uber.org/atomic"
@@ -22,61 +23,41 @@ func Bool(name string) *atomic.Bool {
2223
return Any(name, atomic.NewBool(false))
2324
}
2425

25-
func Float(name string) *expvar.Float {
26-
mux.Lock()
27-
defer mux.Unlock()
28-
29-
v := expvar.Get(name)
30-
if v == nil {
31-
return expvar.NewFloat(name)
32-
}
33-
return v.(*expvar.Float)
26+
func Float(name string) *atomic.Float64 {
27+
return Any(name, atomic.NewFloat64(0))
3428
}
3529

36-
func Int(name string) *expvar.Int {
37-
mux.Lock()
38-
defer mux.Unlock()
39-
40-
v := expvar.Get(name)
41-
if v == nil {
42-
return expvar.NewInt(name)
43-
}
44-
return v.(*expvar.Int)
30+
func Int(name string) *atomic.Int64 {
31+
return Any(name, atomic.NewInt64(0))
4532
}
4633

47-
func String(name string) *expvar.String {
48-
mux.Lock()
49-
defer mux.Unlock()
34+
func String(name string) *atomic.String {
35+
return Any(name, atomic.NewString(""))
36+
}
5037

51-
v := expvar.Get(name)
52-
if v == nil {
53-
return expvar.NewString(name)
54-
}
55-
return v.(*expvar.String)
38+
func Duration(name string) *atomic.Duration {
39+
return Any(name, atomic.NewDuration(0))
5640
}
5741

58-
func Map(name string) *expvar.Map {
59-
mux.Lock()
60-
defer mux.Unlock()
42+
func Time(name string) *atomic.Time {
43+
return Any(name, atomic.NewTime(time.Now()))
44+
}
6145

62-
v := expvar.Get(name)
63-
if v == nil {
64-
return expvar.NewMap(name)
65-
}
66-
return v.(*expvar.Map)
46+
func Error(name string) *atomic.Error {
47+
return Any(name, atomic.NewError(nil))
6748
}
6849

69-
var _ json.Marshaler = (*Value)(nil)
50+
var _ json.Marshaler = (*Func)(nil)
7051

71-
type Value func() any
52+
type Func func() any
7253

73-
func (f Value) MarshalJSON() ([]byte, error) {
54+
func (f Func) MarshalJSON() ([]byte, error) {
7455
return json.Marshal(f())
7556
}
7657

77-
func (f Value) Value() any { return f() }
58+
func (f Func) Value() any { return f() }
7859

79-
func (f Value) String() (r string) {
60+
func (f Func) String() (r string) {
8061
return toString(f())
8162
}
8263

@@ -87,6 +68,7 @@ func errToString(err error) string {
8768

8869
return strconv.Quote(fmt.Sprintf("err:%s detail:%#v", err.Error(), err))
8970
}
71+
9072
func toString(dt any) (r string) {
9173
var jsonStr = func(data any) string {
9274
ret, err := json.Marshal(data)
@@ -106,6 +88,8 @@ func toString(dt any) (r string) {
10688
return strconv.Quote(dt)
10789
case []byte:
10890
return strconv.Quote(string(dt))
91+
case json.Marshaler:
92+
return jsonStr(dt)
10993
case fmt.Stringer:
11094
return strconv.Quote(dt.String())
11195
case error:
@@ -142,9 +126,7 @@ func (a anyValue) MarshalJSON() ([]byte, error) {
142126
return json.Marshal(a.v)
143127
}
144128

145-
func (a anyValue) Value() any { return a.v }
146-
147-
func Register(name string, value Value) {
129+
func Register(name string, value Func) {
148130
assert.If(Has(name), "name:%s already exists", name)
149131
expvar.Publish(name, value)
150132
}

vars/z_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package vars_test
22

33
import (
44
"expvar"
5-
"strconv"
65
"testing"
76

87
"github.com/pubgo/funk/assert"
@@ -17,5 +16,5 @@ func TestAny(t *testing.T) {
1716
assert.If(bb.Load() != false, "not match")
1817
assert.If(vars.Bool(name).String() != "false", "not match")
1918
vars.Bool(name).Store(true)
20-
assert.MustEqual(expvar.Get(name).String(), strconv.Quote("true"))
19+
assert.MustEqual(expvar.Get(name).String(), "true")
2120
}

0 commit comments

Comments
 (0)