Initial commit

This commit is contained in:
yan.y
2024-03-27 23:25:08 +08:00
commit 0884384e91
127 changed files with 9353 additions and 0 deletions
+63
View File
@@ -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
}
+30
View File
@@ -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()
}
+26
View File
@@ -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, "中文字符串拼接")
}
})
}