159 lines
3.4 KiB
Go
159 lines
3.4 KiB
Go
|
|
package stringUtil
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"bytes"
|
|||
|
|
"fmt"
|
|||
|
|
"reflect"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// map转换为字符串(如果类型不匹配)
|
|||
|
|
// data:map数据
|
|||
|
|
// separator1:间隔符1
|
|||
|
|
// separator1:间隔符2
|
|||
|
|
// 返回值:
|
|||
|
|
// result:转换后的字符串
|
|||
|
|
// err:错误信息
|
|||
|
|
func MapToString(data interface{}, separator1, separator2 string) (result string, err error) {
|
|||
|
|
if data == nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
val := reflect.ValueOf(data)
|
|||
|
|
if val.Kind() != reflect.Map {
|
|||
|
|
err = fmt.Errorf("只能转换Map类型的,当前类型是:%v", val.Kind().String())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if val.Len() <= 0 {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for _, keyItem := range val.MapKeys() {
|
|||
|
|
valItem := val.MapIndex(keyItem)
|
|||
|
|
result = result + fmt.Sprintf("%v%s%v%s", keyItem.Interface(), separator1, valItem.Interface(), separator2)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
result = result[:len(result)-1]
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// map转换为字符串(如果类型不匹配)
|
|||
|
|
// data:map数据
|
|||
|
|
// separator1:间隔符1
|
|||
|
|
// separator1:间隔符2
|
|||
|
|
// valGetFunc:结果值获取函数
|
|||
|
|
// 返回值:
|
|||
|
|
// result:转换后的字符串
|
|||
|
|
// err:错误信息
|
|||
|
|
func MapToString2(data interface{}, separator1, separator2 string, valGetFunc func(val interface{}) interface{}) (result string, err error) {
|
|||
|
|
if data == nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
val := reflect.ValueOf(data)
|
|||
|
|
if val.Kind() != reflect.Map {
|
|||
|
|
err = fmt.Errorf("只能转换Map类型的,当前类型是:%v", val.Kind().String())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if val.Len() <= 0 {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for _, keyItem := range val.MapKeys() {
|
|||
|
|
valItem := val.MapIndex(keyItem)
|
|||
|
|
result = result + fmt.Sprintf("%v%s%v%s", keyItem.Interface(), separator1, valGetFunc(valItem.Interface()), separator2)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
result = result[:len(result)-1]
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 把一个集合转换成字符串
|
|||
|
|
// data:slice类型的集合
|
|||
|
|
// separator:分隔符
|
|||
|
|
// 返回值:
|
|||
|
|
// result:转换后的字符串
|
|||
|
|
// err:错误信息对象
|
|||
|
|
func SliceToString(data interface{}, separator string) (result string, err error) {
|
|||
|
|
if data == nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
value := reflect.ValueOf(data)
|
|||
|
|
if value.Kind() != reflect.Slice && value.Kind() != reflect.Array {
|
|||
|
|
err = fmt.Errorf("目标类型不正确,只能是slice或array 当前类型是:%v", value.Kind().String())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if value.Len() <= 0 {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for i := 0; i < value.Len(); i++ {
|
|||
|
|
valItem := value.Index(i)
|
|||
|
|
result = result + fmt.Sprintf("%s%v", separator, valItem.Interface())
|
|||
|
|
}
|
|||
|
|
result = result[1:]
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func StringListToString(list []string, delimiter string) string {
|
|||
|
|
var buffer bytes.Buffer
|
|||
|
|
for i, v := range list {
|
|||
|
|
if i != len(list)-1 {
|
|||
|
|
buffer.WriteString(v)
|
|||
|
|
buffer.WriteString(delimiter)
|
|||
|
|
} else {
|
|||
|
|
buffer.WriteString(v)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return buffer.String()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func IntListToString(list []int, delimiter string) string {
|
|||
|
|
var buffer bytes.Buffer
|
|||
|
|
for i, v := range list {
|
|||
|
|
if i != len(list)-1 {
|
|||
|
|
buffer.WriteString(fmt.Sprintf("%d", v))
|
|||
|
|
buffer.WriteString(delimiter)
|
|||
|
|
} else {
|
|||
|
|
buffer.WriteString(fmt.Sprintf("%d", v))
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return buffer.String()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func Int32ListToString(list []int32, delimiter string) string {
|
|||
|
|
var buffer bytes.Buffer
|
|||
|
|
for i, v := range list {
|
|||
|
|
if i != len(list)-1 {
|
|||
|
|
buffer.WriteString(fmt.Sprintf("%d", v))
|
|||
|
|
buffer.WriteString(delimiter)
|
|||
|
|
} else {
|
|||
|
|
buffer.WriteString(fmt.Sprintf("%d", v))
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return buffer.String()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func Int64ListToString(list []int64, delimiter string) string {
|
|||
|
|
var buffer bytes.Buffer
|
|||
|
|
for i, v := range list {
|
|||
|
|
if i != len(list)-1 {
|
|||
|
|
buffer.WriteString(fmt.Sprintf("%d", v))
|
|||
|
|
buffer.WriteString(delimiter)
|
|||
|
|
} else {
|
|||
|
|
buffer.WriteString(fmt.Sprintf("%d", v))
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return buffer.String()
|
|||
|
|
}
|