diff --git a/util/func/func.go b/util/func/func.go index 33aa7122..c4643386 100644 --- a/util/func/func.go +++ b/util/func/func.go @@ -3,6 +3,7 @@ package gfunc import ( gcore "github.com/snail007/gmc/core" gerror "github.com/snail007/gmc/module/error" + gvalue "github.com/snail007/gmc/util/value" ) type panicError struct{} @@ -62,3 +63,19 @@ func CheckError(err error) { } return } + +// CheckError2 check the err and return the value if err is nil +func CheckError2(v interface{}, err error) *gvalue.AnyValue { + if err != nil { + panic(panicErr) + } + return gvalue.NewAny(v) +} + +// CheckError3 check the err and return the value if err is nil +func CheckError3(v1 interface{}, v2 interface{}, err error) (*gvalue.AnyValue, *gvalue.AnyValue) { + if err != nil { + panic(panicErr) + } + return gvalue.NewAny(v1), gvalue.NewAny(v2) +} diff --git a/util/func/func_test.go b/util/func/func_test.go index 1feb4619..d80a42ee 100644 --- a/util/func/func_test.go +++ b/util/func/func_test.go @@ -36,6 +36,38 @@ func TestCheckError(t *testing.T) { return } assert.Equal(t, "abc", f3().Error()) + + var f4 = func() int { + defer CatchCheckError() + v := CheckError2(123, nil) + return v.Int() + } + assert.Equal(t, 123, f4()) + + var f5 = func() interface{} { + defer CatchCheckError() + v := CheckError2(123, errors.New("abc")) + return v.Val() + } + assert.Equal(t, nil, f5()) + + var f6 = func() (int, string) { + defer CatchCheckError() + v1, v2 := CheckError3(123, "abc", nil) + return v1.Int(), v2.String() + } + a, b := f6() + assert.Equal(t, 123, a) + assert.Equal(t, "abc", b) + + var f7 = func() (interface{}, interface{}) { + defer CatchCheckError() + v1, v2 := CheckError3(123, "abc", errors.New("abc")) + return v1.Val(), v2.Val() + } + c, d := f7() + assert.Equal(t, nil, c) + assert.Equal(t, nil, d) } func TestRecover(t *testing.T) { diff --git a/util/net/common.go b/util/net/common.go index 324bf6d2..f00b4751 100644 --- a/util/net/common.go +++ b/util/net/common.go @@ -130,7 +130,7 @@ func RandomListen(ip ...string) (l net.Listener, port string, err error) { _, port, _ = net.SplitHostPort(l.Addr().String()) return } -func RandomPort() (port string, err error) { +func RandomPort(ip ...string) (port string, err error) { maxTry := 3 var l net.Listener defer func() { @@ -139,7 +139,7 @@ func RandomPort() (port string, err error) { } }() for i := 0; i < maxTry; i++ { - l, port, err = RandomListen() + l, port, err = RandomListen(ip...) if err == nil { port = NewAddr(l.Addr()).Port() return