mirror of
https://gitee.com/johng/gf
synced 2026-06-06 02:25:47 +08:00
add internal/errors
This commit is contained in:
@ -9,7 +9,6 @@ package gmd5
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
@ -40,9 +39,7 @@ func EncryptFile(path string) (encrypt string, err error) {
|
||||
return "", err
|
||||
}
|
||||
defer func() {
|
||||
if e := f.Close(); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(f.Close(), "file closing error")
|
||||
}()
|
||||
h := md5.New()
|
||||
_, err = io.Copy(h, f)
|
||||
|
||||
@ -10,10 +10,10 @@ package gsha1
|
||||
import (
|
||||
"crypto/sha1"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/gogf/gf/g/internal/errors"
|
||||
"github.com/gogf/gf/g/util/gconv"
|
||||
)
|
||||
|
||||
@ -37,9 +37,7 @@ func EncryptFile(path string) (encrypt string, err error) {
|
||||
return "", err
|
||||
}
|
||||
defer func() {
|
||||
if e := f.Close(); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(f.Close(), "file closing error")
|
||||
}()
|
||||
h := sha1.New()
|
||||
_, err = io.Copy(h, f)
|
||||
|
||||
48
g/internal/errors/errors.go
Normal file
48
g/internal/errors/errors.go
Normal file
@ -0,0 +1,48 @@
|
||||
// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the MIT License.
|
||||
// If a copy of the MIT was not distributed with this file,
|
||||
// You can obtain one at https://github.com/gogf/gf.
|
||||
|
||||
// Package errors provides simple functions to manipulate errors.
|
||||
//
|
||||
// This package can be scalable due to https://go.googlesource.com/proposal/+/master/design/go2draft.md.
|
||||
package errors
|
||||
|
||||
import "github.com/gogf/gf/g/util/gconv"
|
||||
|
||||
// errorWrapper is a simple wrapper for errors.
|
||||
type errorWrapper struct {
|
||||
s string
|
||||
}
|
||||
|
||||
// New returns an error that formats as the given value.
|
||||
func New(value interface{}) error {
|
||||
if value == nil {
|
||||
return nil
|
||||
}
|
||||
return NewText(gconv.String(value))
|
||||
}
|
||||
|
||||
// NewText returns an error that formats as the given text.
|
||||
func NewText(text string) error {
|
||||
if text == "" {
|
||||
return nil
|
||||
}
|
||||
return &errorWrapper{
|
||||
s: text,
|
||||
}
|
||||
}
|
||||
|
||||
// Wrap wraps error with text.
|
||||
func Wrap(err error, text string) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
return NewText(text + ": " + err.Error())
|
||||
}
|
||||
|
||||
// Error implements interface Error.
|
||||
func (e *errorWrapper) Error() string {
|
||||
return e.s
|
||||
}
|
||||
39
g/internal/errors/errors_test.go
Normal file
39
g/internal/errors/errors_test.go
Normal file
@ -0,0 +1,39 @@
|
||||
// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the MIT License.
|
||||
// If a copy of the MIT was not distributed with this file,
|
||||
// You can obtain one at https://github.com/gogf/gf.
|
||||
|
||||
package errors_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/gogf/gf/g/internal/errors"
|
||||
"github.com/gogf/gf/g/test/gtest"
|
||||
)
|
||||
|
||||
func interfaceNil() interface{} {
|
||||
return nil
|
||||
}
|
||||
|
||||
func nilError() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func Test_Nil(t *testing.T) {
|
||||
gtest.Case(t, func() {
|
||||
gtest.Assert(errors.New(interfaceNil()), nil)
|
||||
gtest.Assert(errors.Wrap(nilError(), "test"), nil)
|
||||
})
|
||||
}
|
||||
|
||||
func Test_Wrap(t *testing.T) {
|
||||
gtest.Case(t, func() {
|
||||
err := errors.New("1")
|
||||
err = errors.Wrap(err, "func2 error")
|
||||
err = errors.Wrap(err, "func3 error")
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(err.Error(), "func3 error: func2 error: 1")
|
||||
})
|
||||
}
|
||||
@ -10,10 +10,11 @@ import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"io"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/g/internal/errors"
|
||||
)
|
||||
|
||||
// 封装的链接对象
|
||||
@ -208,9 +209,7 @@ func (c *Conn) RecvWithTimeout(length int, timeout time.Duration, retry ...Retry
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetRecvDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetRecvDeadline(time.Time{}), "SetRecvDeadline error")
|
||||
}()
|
||||
data, err = c.Recv(length, retry...)
|
||||
return
|
||||
@ -222,9 +221,7 @@ func (c *Conn) SendWithTimeout(data []byte, timeout time.Duration, retry ...Retr
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetSendDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetSendDeadline(time.Time{}), "SetSendDeadline error")
|
||||
}()
|
||||
err = c.Send(data, retry...)
|
||||
return
|
||||
|
||||
@ -8,9 +8,10 @@ package gtcp
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/g/internal/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -73,9 +74,7 @@ func (c *Conn) SendPkgWithTimeout(data []byte, timeout time.Duration, option ...
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetSendDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetSendDeadline(time.Time{}), "SetSendDeadline error")
|
||||
}()
|
||||
err = c.SendPkg(data, option...)
|
||||
return
|
||||
@ -148,9 +147,7 @@ func (c *Conn) RecvPkgWithTimeout(timeout time.Duration, option ...PkgOption) (d
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetRecvDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetRecvDeadline(time.Time{}), "SetRecvDeadline error")
|
||||
}()
|
||||
data, err = c.RecvPkg(option...)
|
||||
return
|
||||
|
||||
@ -7,9 +7,10 @@
|
||||
package gtcp
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/g/internal/errors"
|
||||
|
||||
"github.com/gogf/gf/g/container/gmap"
|
||||
"github.com/gogf/gf/g/container/gpool"
|
||||
)
|
||||
@ -121,9 +122,7 @@ func (c *PoolConn) RecvWithTimeout(length int, timeout time.Duration, retry ...R
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetRecvDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetRecvDeadline(time.Time{}), "SetRecvDeadline error")
|
||||
}()
|
||||
data, err = c.Recv(length, retry...)
|
||||
return
|
||||
@ -135,9 +134,7 @@ func (c *PoolConn) SendWithTimeout(data []byte, timeout time.Duration, retry ...
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetSendDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetSendDeadline(time.Time{}), "SetSendDeadline error")
|
||||
}()
|
||||
err = c.Send(data, retry...)
|
||||
return
|
||||
|
||||
@ -7,8 +7,9 @@
|
||||
package gtcp
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/g/internal/errors"
|
||||
)
|
||||
|
||||
// 简单协议: (方法覆盖)发送数据
|
||||
@ -46,9 +47,7 @@ func (c *PoolConn) RecvPkgWithTimeout(timeout time.Duration, option ...PkgOption
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetRecvDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetRecvDeadline(time.Time{}), "SetRecvDeadline error")
|
||||
}()
|
||||
data, err = c.RecvPkg(option...)
|
||||
return
|
||||
@ -60,9 +59,7 @@ func (c *PoolConn) SendPkgWithTimeout(data []byte, timeout time.Duration, option
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetSendDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetSendDeadline(time.Time{}), "SetSendDeadline error")
|
||||
}()
|
||||
err = c.SendPkg(data, option...)
|
||||
return
|
||||
|
||||
@ -7,10 +7,11 @@
|
||||
package gudp
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/g/internal/errors"
|
||||
)
|
||||
|
||||
// 封装的UDP链接对象
|
||||
@ -181,9 +182,7 @@ func (c *Conn) RecvWithTimeout(length int, timeout time.Duration, retry ...Retry
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetRecvDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetRecvDeadline(time.Time{}), "SetRecvDeadline error")
|
||||
}()
|
||||
data, err = c.Recv(length, retry...)
|
||||
return
|
||||
@ -195,9 +194,7 @@ func (c *Conn) SendWithTimeout(data []byte, timeout time.Duration, retry ...Retr
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if e := c.SetSendDeadline(time.Time{}); e != nil {
|
||||
err = errors.New(err.Error() + "; " + e.Error())
|
||||
}
|
||||
err = errors.Wrap(c.SetSendDeadline(time.Time{}), "SetSendDeadline error")
|
||||
}()
|
||||
err = c.Send(data, retry...)
|
||||
return
|
||||
|
||||
@ -1,51 +1,5 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gogf/gf/g/encoding/gjson"
|
||||
"github.com/gogf/gf/g/util/gconv"
|
||||
)
|
||||
|
||||
//type TemplateMessage struct {
|
||||
// Touser string `json:"touser,omitempty"`
|
||||
// TemplateId string `json:"template_id,omitempty"`
|
||||
// Miniprogram interface{} `json:"miniprograme,omitempty"`
|
||||
// Data interface{} `json:"data,omitempty"`
|
||||
//}
|
||||
|
||||
type TemplateMessage struct {
|
||||
Touser string `json:"touser,omitempty"`
|
||||
TemplateId string `json:"template_id,omitempty"`
|
||||
Miniprogram *gjson.Json `json:"miniprograme,omitempty"`
|
||||
Data *gjson.Json `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
// 封装模版消息
|
||||
func getTemplateMessage(message string) string {
|
||||
templateId := "22222222"
|
||||
miniprogram := `{"appid":"111111111","pagepath":"pages\/index?ald_media_id=20962&ald_link_key=bd660b4962a599f2"}`
|
||||
data := `{"first":{"value":"送您一个随机红包,点击领取¥0.3-¥10","color":"#FF0000"},"keyword1":{"value":"¥0.3-¥10"},"keyword2":{"value":"2019年06月19日 11:45"},"keyword3":{"value":"微信零钱"},"keyword4":{"value":"点击此消息即可提现","color":"#FF0000"}}`
|
||||
miniprogramJson := gjson.New(miniprogram)
|
||||
dataJson := gjson.New(data)
|
||||
//glog.Infof(miniprogramJson.ToJsonString())
|
||||
//glog.Info(dataJson.ToJsonString())
|
||||
|
||||
templateMessage := TemplateMessage{
|
||||
Touser: message,
|
||||
TemplateId: templateId,
|
||||
Miniprogram: miniprogramJson,
|
||||
Data: dataJson,
|
||||
}
|
||||
|
||||
//glog.Debug(dataJson.ToJsonString())
|
||||
//json, _ := gjson.New(templateMessage).ToJsonString()
|
||||
//return json
|
||||
//glog.Info(templateMessage.Miniprogram.ToJsonString())
|
||||
return gconv.String(templateMessage)
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(getTemplateMessage("test"))
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user