diff --git a/bytes/bytes.go b/bytes/bytes.go index a243412..b9cc0bb 100644 --- a/bytes/bytes.go +++ b/bytes/bytes.go @@ -22,8 +22,8 @@ func String(b []byte) string { return *(*string)(unsafe.Pointer(&b)) } -// BytesEqual 判断两个字节切片每个元素是否相等 -func BytesEqual(a, b []byte) bool { +// Equal 判断两个字节切片每个元素是否相等 +func Equal(a, b []byte) bool { aLen, bLen := len(a), len(b) if aLen != bLen { return false @@ -61,12 +61,34 @@ func Reverse(b []byte) { } } -// Remove 从b中删除ele -func Remove(b []byte, ele byte) { - for i := range b { - if ele == b[i] { - b = append(b[:i], b[i+1:]...) - break +// Remove 对于eles的每个元素,只删除一次 +func Remove(b *[]byte, eles ...byte) { + if b == nil || len(*b) == 0 { + return + } + for _, e := range eles { + for i := 0; i < len(*b); { + if e == (*b)[i] { + copy((*b)[i:], (*b)[i+1:]) + (*b)[len(*b)-1] = 0 + *b = (*b)[:len(*b)-1] + break + } else { + i++ + } + } + } +} + +// RemoveAll 删除所有的ele +func RemoveAll(b *[]byte, eles ...byte) { + for _, e := range eles { + for i := 0; i < len(*b); { + if (*b)[i] == e { + *b = append((*b)[:i], (*b)[i+1:]...) + } else { + i++ + } } } } diff --git a/files/file.go b/files/file.go index 862859f..95c42af 100644 --- a/files/file.go +++ b/files/file.go @@ -1,6 +1,10 @@ package files -import "os" +import ( + "encoding/json" + "io/ioutil" + "os" +) // NewPath 判断目录是否存在,如果不存在,则新建一个目录 func NewPath(targetPath string) error { @@ -14,3 +18,13 @@ func NewPath(targetPath string) error { } return nil } + +// LoadJSONFile 加载JSON文件 +func LoadJSONFile(file string, dst interface{}) error { + content, err := ioutil.ReadFile(file) + if err != nil { + return err + } + err = json.Unmarshal(content, dst) + return err +} diff --git a/go.mod b/go.mod index 63754bb..8c40848 100644 --- a/go.mod +++ b/go.mod @@ -13,4 +13,5 @@ require ( github.com/vmihailenco/msgpack/v5 v5.3.4 // indirect go.uber.org/zap v1.18.1 // indirect golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e // indirect + gopkg.in/ini.v1 v1.66.4 // indirect ) diff --git a/go.sum b/go.sum index ffaa431..a1d6b04 100644 --- a/go.sum +++ b/go.sum @@ -63,6 +63,8 @@ google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/l google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/strings/strings.go b/strings/strings.go index 691e862..443b373 100644 --- a/strings/strings.go +++ b/strings/strings.go @@ -82,8 +82,8 @@ func IsEmpty(s string) bool { return s == "" } -// SliceEqual 判断两个字符串切片值是否相等 -func SliceEqual(a, b []string) bool { +// Equal 判断两个字符串切片值是否相等 +func Equal(a, b []string) bool { aLen, bLen := len(a), len(b) if aLen != bLen { return false @@ -122,11 +122,35 @@ func Reverse(s []string) { } // Remove 从s中删除第一个ele -func Remove(ele string, s []string) { - for i := range s { - if s[i] == ele { - s = append(s[:i], s[i+1:]...) - break +func Remove(s *[]string, eles ...string) { + if s == nil || len(*s) == 0 { + return + } + for _, e := range eles { + for i := 0; i < len(*s); { + if e == (*s)[i] { + copy((*s)[i:], (*s)[i+1:]) + (*s)[len(*s)-1] = "" + *s = (*s)[:len(*s)-1] + break + } else { + i++ + } + } + } +} + +// RemoveAll 删除所有的eles +func RemoveAll(s *[]string, eles ...string) { + for _, e := range eles { + for i := 0; i < len(*s); { + if (*s)[i] == e { + copy((*s)[i:], (*s)[i+1:]) + (*s)[len(*s)-1] = "" + *s = (*s)[:len(*s)-1] + } else { + i++ + } } } }