Initial commit
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package str
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"regexp"
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
type StringArray string
|
||||
|
||||
func (r StringArray) MarshalJSON() ([]byte, error) {
|
||||
items := []string{}
|
||||
if string(r) != "" {
|
||||
items = strings.Split(string(r), ",")
|
||||
}
|
||||
for _, item := range items {
|
||||
item = strings.TrimSpace(item)
|
||||
}
|
||||
return json.Marshal(items)
|
||||
}
|
||||
|
||||
func Ellipsis(text string, length int) string {
|
||||
r := []rune(text)
|
||||
if len(r) > length {
|
||||
return string(r[0:length]) + "..."
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func HasChinese(str string) bool {
|
||||
for _, r := range str {
|
||||
if unicode.Is(unicode.Scripts["Han"], r) || (regexp.MustCompile("[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]").MatchString(string(r))) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func IsGBK(data []byte) bool {
|
||||
length := len(data)
|
||||
var i int = 0
|
||||
for i < length {
|
||||
if data[i] <= 0x7f {
|
||||
//编码0~127,只有一个字节的编码,兼容ASCII码
|
||||
i++
|
||||
continue
|
||||
} else {
|
||||
//大于127的使用双字节编码,落在gbk编码范围内的字符
|
||||
if data[i] >= 0x81 &&
|
||||
data[i] <= 0xfe &&
|
||||
data[i+1] >= 0x40 &&
|
||||
data[i+1] <= 0xfe &&
|
||||
data[i+1] != 0xf7 {
|
||||
i += 2
|
||||
continue
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package str
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// StructToMap 利用反射将结构体转化为map
|
||||
func StructToMap(obj interface{}) map[string]interface{} {
|
||||
obj1 := reflect.TypeOf(obj)
|
||||
obj2 := reflect.ValueOf(obj)
|
||||
|
||||
var data = make(map[string]interface{})
|
||||
for i := 0; i < obj1.NumField(); i++ {
|
||||
data[obj1.Field(i).Name] = obj2.Field(i).Interface()
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
// 连接字符串
|
||||
func Join(strs ...string) string {
|
||||
var builder strings.Builder
|
||||
if len(strs) == 0 {
|
||||
return ""
|
||||
}
|
||||
for _, str := range strs {
|
||||
builder.WriteString(str)
|
||||
}
|
||||
return builder.String()
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package str
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestJoin(t *testing.T) {
|
||||
t.Run("字符串拼接", func(t *testing.T) {
|
||||
if got := Join("abc", " ", "def"); got != "abc def" {
|
||||
t.Errorf("Join() = %v, want %v", got, "abc def")
|
||||
}
|
||||
})
|
||||
t.Run("字符串拼接单个字符", func(t *testing.T) {
|
||||
if got := Join("abc"); got != "abc" {
|
||||
t.Errorf("Join() = %v, want %v", got, "abc")
|
||||
}
|
||||
})
|
||||
t.Run("中文字符串拼接", func(t *testing.T) {
|
||||
if got := Join("中文字符串拼接", " ", "你好"); got != "中文字符串拼接 你好" {
|
||||
t.Errorf("Join() = %v, want %v", got, "中文字符串拼接 你好")
|
||||
}
|
||||
})
|
||||
t.Run("中文字符串拼接单个字符", func(t *testing.T) {
|
||||
if got := Join("中文字符串拼接"); got != "中文字符串拼接" {
|
||||
t.Errorf("Join() = %v, want %v", got, "中文字符串拼接")
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user