From 0054da0620a5c0124f230a2ac47af267e12547d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Thu, 20 Apr 2023 16:36:09 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ua=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 1 + go.sum | 2 ++ user_agent.go | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) diff --git a/go.mod b/go.mod index 72d1a6a..a57b65e 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect + github.com/mssola/user_agent v0.6.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect diff --git a/go.sum b/go.sum index d03dc3e..4eb137e 100644 --- a/go.sum +++ b/go.sum @@ -9,6 +9,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumC github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/mssola/user_agent v0.6.0 h1:uwPR4rtWlCHRFyyP9u2KOV0u8iQXmS7Z7feTrstQwk4= +github.com/mssola/user_agent v0.6.0/go.mod h1:TTPno8LPY3wAIEKRpAtkdMT0f8SE24pLRGPahjCH4uw= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/user_agent.go b/user_agent.go index c5aebf9..4873f89 100644 --- a/user_agent.go +++ b/user_agent.go @@ -10,6 +10,8 @@ package util import ( "math/rand" "time" + + "github.com/mssola/user_agent" ) var defaultUserAgentList = []string{ @@ -98,3 +100,77 @@ func (ua *userAgent) GetRandomUA() string { idx := rand.Intn(len(ua.list)) return ua.list[idx] } + +// Parse 解析UA +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 16:31 2023/4/20 +func (ua *userAgent) Parse(inputUA string) *UAInfo { + uaInstance := user_agent.New(inputUA) + uaInfo := &UAInfo{ + Mozilla: uaInstance.Mozilla(), + Platform: uaInstance.Platform(), + OS: uaInstance.OS(), + Localization: uaInstance.Localization(), + Model: uaInstance.Model(), + Browser: &BrowserInfo{ + Engine: "", + EngineVersion: "", + Name: "", + Version: "", + }, + OSInfo: &OSInfo{ + FullName: uaInstance.OSInfo().FullName, + Name: uaInstance.OSInfo().Name, + Version: uaInstance.OSInfo().Version, + }, + Bot: false, + Mobile: false, + Undecided: false, + } + uaInfo.Browser.Engine, uaInfo.Browser.EngineVersion = uaInstance.Engine() + uaInfo.Browser.Name, uaInfo.Browser.Version = uaInstance.Browser() + return uaInfo +} + +// UAInfo ua解析结果 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 16:34 2023/4/20 +type UAInfo struct { + Mozilla string `json:"mozilla"` + Platform string `json:"platform"` + OS string `json:"os"` + OSInfo *OSInfo `json:"os_info"` + Localization string `json:"localization"` + Model string `json:"model"` + Browser *BrowserInfo `json:"browser"` + Bot bool `json:"bot"` + Mobile bool `json:"mobile"` + Undecided bool `json:"undecided"` +} + +// BrowserInfo 浏览器信息 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 16:34 2023/4/20 +type BrowserInfo struct { + Engine string `json:"engine"` // 浏览器引擎 + EngineVersion string `json:"engine_version"` // 浏览器引擎版本 + Name string `json:"name"` // 浏览器名称 + Version string `json:"version"` // 浏览器版本 +} + +// OSInfo 系统信息 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 16:34 2023/4/20 +type OSInfo struct { + FullName string `json:"full_name"` // 操作系统全称 + Name string `json:"name"` // 操作系统名称 + Version string `json:"version"` // 操作系统版本 +} From 8dbec65861cda0296f01ae765203d27152705e03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Thu, 4 May 2023 18:40:25 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E8=A7=84=E5=88=92string=E8=BD=AC=E4=BB=BB?= =?UTF-8?q?=E6=84=8F=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init.go | 4 ++ string_convert.go | 169 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 string_convert.go diff --git a/init.go b/init.go index 3455b98..37e40a3 100644 --- a/init.go +++ b/init.go @@ -42,6 +42,8 @@ var ( Console *console // Browser 浏览器操作实例 Browser *browser + // StringConvert 字符串转为任意类型 + StringConvert *stringConvert ) func init() { @@ -70,4 +72,6 @@ func init() { "linux": "xdg-open", }, } + // StringConvert + StringConvert = &stringConvert{} } diff --git a/string_convert.go b/string_convert.go new file mode 100644 index 0000000..b6774f8 --- /dev/null +++ b/string_convert.go @@ -0,0 +1,169 @@ +// Package util ... +// +// Description : util ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2023-05-04 18:25 +package util + +import ( + "github.com/pkg/errors" +) + +type stringConvert struct { +} + +// ToFloat32 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:26 2023/5/4 +func (sc *stringConvert) ToFloat32(str string) (float32, error) { + return 0, nil +} + +// ToFloat64 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:26 2023/5/4 +func (sc *stringConvert) ToFloat64(str string) (float64, error) { + return 0, nil +} + +// ToDouble 转double +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:33 2023/5/4 +func (sc *stringConvert) ToDouble(str string) (float64, error) { + return sc.ToFloat64(str) +} + +// ToNumber 转数字, 使用最高精度的float64 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:33 2023/5/4 +func (sc *stringConvert) ToNumber(str string) (float64, error) { + return sc.ToFloat64(str) +} + +// ToInt8 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:29 2023/5/4 +func (sc *stringConvert) ToInt8(str string) (int8, error) { + return 0, nil +} + +// ToInt16 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:29 2023/5/4 +func (sc *stringConvert) ToInt16(str string) (int16, error) { + return 0, nil +} + +// ToInt32 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:29 2023/5/4 +func (sc *stringConvert) ToInt32(str string) (int32, error) { + return 0, nil +} + +// ToInt64 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:29 2023/5/4 +func (sc *stringConvert) ToInt64(str string) (int64, error) { + return 0, nil +} + +// ToUint8 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:30 2023/5/4 +func (sc *stringConvert) ToUint8(str string) (uint8, error) { + return 0, nil +} + +// ToUint16 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:29 2023/5/4 +func (sc *stringConvert) ToUint16(str string) (uint16, error) { + return 0, nil +} + +// ToUint32 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:29 2023/5/4 +func (sc *stringConvert) ToUint32(str string) (uint32, error) { + return 0, nil +} + +// ToUint64 ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:29 2023/5/4 +func (sc *stringConvert) ToUint64(str string) (uint64, error) { + return 0, nil +} + +// ToUint ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:29 2023/5/4 +func (sc *stringConvert) ToUint(str string) (uint, error) { + return 0, nil +} + +// ToBool ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:34 2023/5/4 +func (sc *stringConvert) ToBool(str string) (bool, error) { + return false, nil +} + +// ToObject ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:35 2023/5/4 +func (sc *stringConvert) ToObject(str string) (map[string]interface{}, error) { + var ( + err error + result map[string]interface{} + ) + if err = JSON.UnmarshalWithNumber([]byte(str), &result); nil != err { + return nil, err + } + return result, nil +} + +// ToStruct ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:38 2023/5/4 +func (sc *stringConvert) ToStruct(str string, receiver interface{}) error { + if nil == receiver { + return errors.New("receiver is nil") + } + return JSON.UnmarshalWithNumber([]byte(str), receiver) +} From 0c884c1f65920f90e06ca17b61ff010ceb16c24b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Thu, 4 May 2023 19:06:10 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E8=BD=ACint?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84slice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- string_convert.go | 156 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/string_convert.go b/string_convert.go index b6774f8..b270bc9 100644 --- a/string_convert.go +++ b/string_convert.go @@ -8,6 +8,8 @@ package util import ( + "strings" + "github.com/pkg/errors" ) @@ -86,6 +88,10 @@ func (sc *stringConvert) ToInt64(str string) (int64, error) { return 0, nil } +func (sc *stringConvert) ToInt(str string) (int, error) { + return 0, nil +} + // ToUint8 ... // // Author : go_developer@163.com<白茶清欢> @@ -167,3 +173,153 @@ func (sc *stringConvert) ToStruct(str string, receiver interface{}) error { } return JSON.UnmarshalWithNumber([]byte(str), receiver) } + +// ToInt8Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:55 2023/5/4 +func (sc *stringConvert) ToInt8Slice(str string, splitChar ...string) ([]int8, error) { + var ( + err error + res []int8 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]int8, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToInt8(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToInt16Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 19:01 2023/5/4 +func (sc *stringConvert) ToInt16Slice(str string, splitChar ...string) ([]int16, error) { + var ( + err error + res []int16 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]int16, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToInt16(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToInt32Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 19:03 2023/5/4 +func (sc *stringConvert) ToInt32Slice(str string, splitChar ...string) ([]int32, error) { + var ( + err error + res []int32 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]int32, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToInt32(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToInt64Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 19:04 2023/5/4 +func (sc *stringConvert) ToInt64Slice(str string, splitChar ...string) ([]int64, error) { + var ( + err error + res []int64 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]int64, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToInt64(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToIntSlice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 19:04 2023/5/4 +func (sc *stringConvert) ToIntSlice(str string, splitChar ...string) ([]int, error) { + var ( + err error + res []int + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]int, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToInt(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} From 6741dcf03374eb585e38f1e48d0e13ebda070139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 5 May 2023 10:48:55 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- string_convert.go | 96 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 83 insertions(+), 13 deletions(-) diff --git a/string_convert.go b/string_convert.go index b270bc9..767b26e 100644 --- a/string_convert.go +++ b/string_convert.go @@ -22,7 +22,12 @@ type stringConvert struct { // // Date : 18:26 2023/5/4 func (sc *stringConvert) ToFloat32(str string) (float32, error) { - return 0, nil + var ( + err error + res float32 + ) + err = ConvertAssign(&res, str) + return res, err } // ToFloat64 ... @@ -31,7 +36,12 @@ func (sc *stringConvert) ToFloat32(str string) (float32, error) { // // Date : 18:26 2023/5/4 func (sc *stringConvert) ToFloat64(str string) (float64, error) { - return 0, nil + var ( + err error + res float64 + ) + err = ConvertAssign(&res, str) + return res, err } // ToDouble 转double @@ -58,7 +68,12 @@ func (sc *stringConvert) ToNumber(str string) (float64, error) { // // Date : 18:29 2023/5/4 func (sc *stringConvert) ToInt8(str string) (int8, error) { - return 0, nil + var ( + err error + res int8 + ) + err = ConvertAssign(&res, str) + return res, err } // ToInt16 ... @@ -67,7 +82,12 @@ func (sc *stringConvert) ToInt8(str string) (int8, error) { // // Date : 18:29 2023/5/4 func (sc *stringConvert) ToInt16(str string) (int16, error) { - return 0, nil + var ( + err error + res int16 + ) + err = ConvertAssign(&res, str) + return res, err } // ToInt32 ... @@ -76,7 +96,12 @@ func (sc *stringConvert) ToInt16(str string) (int16, error) { // // Date : 18:29 2023/5/4 func (sc *stringConvert) ToInt32(str string) (int32, error) { - return 0, nil + var ( + err error + res int32 + ) + err = ConvertAssign(&res, str) + return res, err } // ToInt64 ... @@ -85,11 +110,26 @@ func (sc *stringConvert) ToInt32(str string) (int32, error) { // // Date : 18:29 2023/5/4 func (sc *stringConvert) ToInt64(str string) (int64, error) { - return 0, nil + var ( + err error + res int64 + ) + err = ConvertAssign(&res, str) + return res, err } +// ToInt ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:47 2023/5/5 func (sc *stringConvert) ToInt(str string) (int, error) { - return 0, nil + var ( + err error + res int + ) + err = ConvertAssign(&res, str) + return res, err } // ToUint8 ... @@ -98,7 +138,12 @@ func (sc *stringConvert) ToInt(str string) (int, error) { // // Date : 18:30 2023/5/4 func (sc *stringConvert) ToUint8(str string) (uint8, error) { - return 0, nil + var ( + err error + res uint8 + ) + err = ConvertAssign(&res, str) + return res, err } // ToUint16 ... @@ -107,7 +152,12 @@ func (sc *stringConvert) ToUint8(str string) (uint8, error) { // // Date : 18:29 2023/5/4 func (sc *stringConvert) ToUint16(str string) (uint16, error) { - return 0, nil + var ( + err error + res uint16 + ) + err = ConvertAssign(&res, str) + return res, err } // ToUint32 ... @@ -116,7 +166,12 @@ func (sc *stringConvert) ToUint16(str string) (uint16, error) { // // Date : 18:29 2023/5/4 func (sc *stringConvert) ToUint32(str string) (uint32, error) { - return 0, nil + var ( + err error + res uint32 + ) + err = ConvertAssign(&res, str) + return res, err } // ToUint64 ... @@ -125,7 +180,12 @@ func (sc *stringConvert) ToUint32(str string) (uint32, error) { // // Date : 18:29 2023/5/4 func (sc *stringConvert) ToUint64(str string) (uint64, error) { - return 0, nil + var ( + err error + res uint64 + ) + err = ConvertAssign(&res, str) + return res, err } // ToUint ... @@ -134,7 +194,12 @@ func (sc *stringConvert) ToUint64(str string) (uint64, error) { // // Date : 18:29 2023/5/4 func (sc *stringConvert) ToUint(str string) (uint, error) { - return 0, nil + var ( + err error + res uint + ) + err = ConvertAssign(&res, str) + return res, err } // ToBool ... @@ -143,7 +208,12 @@ func (sc *stringConvert) ToUint(str string) (uint, error) { // // Date : 18:34 2023/5/4 func (sc *stringConvert) ToBool(str string) (bool, error) { - return false, nil + var ( + err error + res bool + ) + err = ConvertAssign(&res, str) + return res, err } // ToObject ... From 96532aff0019e6c95923344f6d6f9258c1f71a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 5 May 2023 10:59:24 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88string2other?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- string_convert.go | 258 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) diff --git a/string_convert.go b/string_convert.go index 767b26e..3ac30ee 100644 --- a/string_convert.go +++ b/string_convert.go @@ -393,3 +393,261 @@ func (sc *stringConvert) ToIntSlice(str string, splitChar ...string) ([]int, err } return res, nil } + +// ToUint8Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:50 2023/5/5 +func (sc *stringConvert) ToUint8Slice(str string, splitChar ...string) ([]uint8, error) { + var ( + err error + res []uint8 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]uint8, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToUint8(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToUint16Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:52 2023/5/5 +func (sc *stringConvert) ToUint16Slice(str string, splitChar ...string) ([]uint16, error) { + var ( + err error + res []uint16 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]uint16, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToUint16(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToUint32Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:53 2023/5/5 +func (sc *stringConvert) ToUint32Slice(str string, splitChar ...string) ([]uint32, error) { + var ( + err error + res []uint32 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]uint32, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToUint32(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToUint64Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:54 2023/5/5 +func (sc *stringConvert) ToUint64Slice(str string, splitChar ...string) ([]uint64, error) { + var ( + err error + res []uint64 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]uint64, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToUint64(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToUintSlice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:54 2023/5/5 +func (sc *stringConvert) ToUintSlice(str string, splitChar ...string) ([]uint, error) { + var ( + err error + res []uint + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]uint, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToUint(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToBoolSlice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:55 2023/5/5 +func (sc *stringConvert) ToBoolSlice(str string, splitChar ...string) ([]bool, error) { + var ( + err error + res []bool + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]bool, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToBool(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToFloat32Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:56 2023/5/5 +func (sc *stringConvert) ToFloat32Slice(str string, splitChar ...string) ([]float32, error) { + var ( + err error + res []float32 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]float32, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToFloat32(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToFloat64Slice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:56 2023/5/5 +func (sc *stringConvert) ToFloat64Slice(str string, splitChar ...string) ([]float64, error) { + var ( + err error + res []float64 + ) + + isSplit := len(splitChar) > 0 + if !isSplit { + if err = JSON.UnmarshalWithNumber([]byte(str), &res); nil != err { + return nil, err + } + return res, nil + } + res = make([]float64, 0) + arr := strings.Split(str, splitChar[0]) + for _, item := range arr { + if itemVal, err := sc.ToFloat64(item); nil != err { + return nil, err + } else { + res = append(res, itemVal) + } + } + return res, nil +} + +// ToDoubleSlice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:57 2023/5/5 +func (sc *stringConvert) ToDoubleSlice(str string, splitChar ...string) ([]float64, error) { + return sc.ToFloat64Slice(str, splitChar...) +} + +// ToNumberSlice ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:57 2023/5/5 +func (sc *stringConvert) ToNumberSlice(str string, splitChar ...string) ([]float64, error) { + return sc.ToFloat64Slice(str, splitChar...) +} From a0e8f3b7c22e35cbe2b6aeb59ab11196df13d92b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sun, 25 Jun 2023 18:05:43 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8B=BC=E9=9F=B3?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 1 + go.sum | 2 + util.go | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 util.go diff --git a/go.mod b/go.mod index f37080e..e654957 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect + github.com/mozillazg/go-pinyin v0.20.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect diff --git a/go.sum b/go.sum index 5b898a0..80ce228 100644 --- a/go.sum +++ b/go.sum @@ -11,6 +11,8 @@ github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+GnMFQ= +github.com/mozillazg/go-pinyin v0.20.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc= github.com/mssola/user_agent v0.6.0 h1:uwPR4rtWlCHRFyyP9u2KOV0u8iQXmS7Z7feTrstQwk4= github.com/mssola/user_agent v0.6.0/go.mod h1:TTPno8LPY3wAIEKRpAtkdMT0f8SE24pLRGPahjCH4uw= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/util.go b/util.go new file mode 100644 index 0000000..8456fdd --- /dev/null +++ b/util.go @@ -0,0 +1,208 @@ +// Package util ... +// +// Description : util ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2023-06-25 17:22 +package util + +import "github.com/mozillazg/go-pinyin" + +// PinYinArg 设置选项方法 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:33 2023/6/25 +type PinYinArg func(arg *pinyin.Args) + +// 拼音风格的设置 + +// PinYinStyleNormal ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:37 2023/6/25 +func PinYinStyleNormal() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.Normal + } +} + +// PinYinStyleToneStand 声调风格1,拼音声调在韵母第一个字母上。如: zhōng guó +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:38 2023/6/25 +func PinYinStyleToneStand() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.Tone + } +} + +// PinYinStyleToneAfterYunMu 声调风格2,即拼音声调在各个韵母之后,用数字 [1-4] 进行表示。如: zho1ng guo2 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:39 2023/6/25 +func PinYinStyleToneAfterYunMu() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.Tone2 + } +} + +// PinYinStyleToneAtEnding 声调风格3,即拼音声调在各个拼音之后,用数字 [1-4] 进行表示。如: zhong1 guo2 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:40 2023/6/25 +func PinYinStyleToneAtEnding() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.Tone3 + } +} + +// PinYinStyleShengMu 声母风格,只返回各个拼音的声母部分。如: zh g 。注意:不是所有的拼音都有声母 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:41 2023/6/25 +func PinYinStyleShengMu() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.Initials + } +} + +// PinYinStyleFirstLetter 首字母风格,只返回拼音的首字母部分。如: z g +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:42 2023/6/25 +func PinYinStyleFirstLetter() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.FirstLetter + } +} + +// PinYinStyleYunMu 韵母风格,只返回各个拼音的韵母部分,不带声调。如: ong uo +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:43 2023/6/25 +func PinYinStyleYunMu() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.Finals + } +} + +// PinYinStyleToneYunMu 韵母风格1,带声调,声调在韵母第一个字母上。如: ōng uó +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:44 2023/6/25 +func PinYinStyleToneYunMu() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.FinalsTone + } +} + +// PinYinStyleToneYunMuAtStart 韵母风格2,带声调,声调在各个韵母之后,用数字 [1-4] 进行表示。如: o1ng uo2 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:45 2023/6/25 +func PinYinStyleToneYunMuAtStart() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.FinalsTone2 + } +} + +// PinYinStyleToneYunMuAtEnding 韵母风格3,带声调,声调在各个拼音之后,用数字 [1-4] 进行表示。如: ong1 uo2 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:40 2023/6/25 +func PinYinStyleToneYunMuAtEnding() PinYinArg { + return func(arg *pinyin.Args) { + arg.Style = pinyin.FinalsTone3 + } +} + +// 拼音风格设置结束 + +// PinYinStyleWithSeparator 设置拼音的分隔符 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:59 2023/6/25 +func PinYinStyleWithSeparator(separator string) PinYinArg { + return func(arg *pinyin.Args) { + if len(separator) == 0 { + return + } + arg.Separator = separator + } +} + +// PinYinStyleWithHeteronym 开启多音字模式 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:03 2023/6/25 +func PinYinStyleWithHeteronym() PinYinArg { + return func(arg *pinyin.Args) { + arg.Heteronym = true + } +} + +// PinYin 汉字转拼音 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:23 2023/6/25 +type PinYin struct { +} + +// Convert 汉字生成拼音 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:26 2023/6/25 +func (py *PinYin) Convert(text string, argFuncList ...PinYinArg) string { + arg := pinyin.NewArgs() + arg.Separator = " " + for _, argFunc := range argFuncList { + argFunc(&arg) + } + + return pinyin.Slug(text, arg) +} + +// ConvertSingle 每个字一个读音, 支持多音字 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:02 2023/6/25 +func (py *PinYin) ConvertSingle(text string, argFuncList ...PinYinArg) []string { + arg := pinyin.NewArgs() + arg.Separator = " " + for _, argFunc := range argFuncList { + argFunc(&arg) + } + + return pinyin.LazyPinyin(text, arg) +} + +// ConvertWithHeteronym 多音字模式 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:02 2023/6/25 +func (py *PinYin) ConvertWithHeteronym(text string, argFuncList ...PinYinArg) [][]string { + arg := pinyin.NewArgs() + arg.Separator = " " + for _, argFunc := range argFuncList { + argFunc(&arg) + } + return pinyin.Pinyin(text, arg) +} From 0c25220b9a00d8fadd625a1388d427f0a0ec2920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sat, 1 Jul 2023 22:53:14 +0800 Subject: [PATCH 7/9] add letter list --- go.mod | 2 +- string.go | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index e654957..bacb0f7 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/go-ini/ini v1.67.0 github.com/mitchellh/go-homedir v1.1.0 + github.com/mozillazg/go-pinyin v0.20.0 github.com/mssola/user_agent v0.6.0 github.com/pkg/errors v0.9.1 github.com/spaolacci/murmur3 v1.1.0 @@ -18,7 +19,6 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/mozillazg/go-pinyin v0.20.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect diff --git a/string.go b/string.go index de97f97..dd76bcb 100644 --- a/string.go +++ b/string.go @@ -17,6 +17,14 @@ import ( "github.com/axgle/mahonia" ) +var ( + // LETTER_LIST 字母列表 + LETTER_LIST = []string{ + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", + "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", + } +) + // stringOperate ... // // Author : go_developer@163.com<白茶清欢> From 7ed8ccbd87370c60bceae77ce5bcf0843f94f289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sat, 1 Jul 2023 23:30:50 +0800 Subject: [PATCH 8/9] update --- init.go | 3 +++ util.go | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/init.go b/init.go index 37e40a3..68b7fd9 100644 --- a/init.go +++ b/init.go @@ -44,6 +44,8 @@ var ( Browser *browser // StringConvert 字符串转为任意类型 StringConvert *stringConvert + // PinYin 汉字转拼音 + PinYin *pinYin ) func init() { @@ -74,4 +76,5 @@ func init() { } // StringConvert StringConvert = &stringConvert{} + PinYin = &pinYin{} } diff --git a/util.go b/util.go index 8456fdd..4c08359 100644 --- a/util.go +++ b/util.go @@ -160,7 +160,7 @@ func PinYinStyleWithHeteronym() PinYinArg { // Author : go_developer@163.com<白茶清欢> // // Date : 17:23 2023/6/25 -type PinYin struct { +type pinYin struct { } // Convert 汉字生成拼音 @@ -168,7 +168,7 @@ type PinYin struct { // Author : go_developer@163.com<白茶清欢> // // Date : 17:26 2023/6/25 -func (py *PinYin) Convert(text string, argFuncList ...PinYinArg) string { +func (py *pinYin) Convert(text string, argFuncList ...PinYinArg) string { arg := pinyin.NewArgs() arg.Separator = " " for _, argFunc := range argFuncList { @@ -183,7 +183,7 @@ func (py *PinYin) Convert(text string, argFuncList ...PinYinArg) string { // Author : go_developer@163.com<白茶清欢> // // Date : 18:02 2023/6/25 -func (py *PinYin) ConvertSingle(text string, argFuncList ...PinYinArg) []string { +func (py *pinYin) ConvertSingle(text string, argFuncList ...PinYinArg) []string { arg := pinyin.NewArgs() arg.Separator = " " for _, argFunc := range argFuncList { @@ -198,7 +198,7 @@ func (py *PinYin) ConvertSingle(text string, argFuncList ...PinYinArg) []string // Author : go_developer@163.com<白茶清欢> // // Date : 18:02 2023/6/25 -func (py *PinYin) ConvertWithHeteronym(text string, argFuncList ...PinYinArg) [][]string { +func (py *pinYin) ConvertWithHeteronym(text string, argFuncList ...PinYinArg) [][]string { arg := pinyin.NewArgs() arg.Separator = " " for _, argFunc := range argFuncList { From 4a2cf51a9c7aedcd09510d1f17e0a6728c6ac7b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sat, 22 Jul 2023 21:59:15 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E5=A2=9E=E5=8A=A0JSON=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E4=BB=A5=E5=8F=8Amap=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- json.go | 29 +++++++++++++++++++++++++++++ map.go | 13 +++++++++++++ 2 files changed, 42 insertions(+) diff --git a/json.go b/json.go index c360d40..26e8fdb 100644 --- a/json.go +++ b/json.go @@ -46,6 +46,35 @@ func (oj *ownJSON) UnmarshalWithNumberForIOReader(ioReader io.ReadCloser, receiv return decoder.Decode(receiver) } +// UnmarshalWithNumberForString 字符串转结构体 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:50 2023/7/22 +func (oj *ownJSON) UnmarshalWithNumberForString(input string, receiver interface{}) error { + return oj.UnmarshalWithNumber([]byte(input), receiver) +} + +// MarshalForByte 序列化并返回字节数组 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:56 2023/7/22 +func (oj *ownJSON) MarshalForByte(input interface{}) []byte { + byteData, _ := json.Marshal(input) + return byteData +} + +// MarshalForString 序列化并返回字符串 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:56 2023/7/22 +func (oj *ownJSON) MarshalForString(input interface{}) string { + byteData := oj.MarshalForByte(input) + return string(byteData) +} + // ConsoleOutput ... // // Author : go_developer@163.com<白茶清欢> diff --git a/map.go b/map.go index 0c65279..d60d5ed 100644 --- a/map.go +++ b/map.go @@ -214,3 +214,16 @@ func (om *ownMap) GetDataWithReceiver(source map[interface{}]interface{}, key in } return ConvertAssign(receiver, source[key]) } + +// ToStruct map转结构体 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:48 2023/7/22 +func (om *ownMap) ToStruct(source map[string]interface{}, receiver interface{}) error { + if nil == source { + return nil + } + byteData := JSON.MarshalForByte(source) + return JSON.UnmarshalWithNumber(byteData, receiver) +}