Files
wrapper/op_string/slice.go

58 lines
1.9 KiB
Go

// Package op_string ...
//
// Description : op_string ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2025-10-13 14:21
package op_string
import (
"strings"
"git.zhangdeman.cn/zhangdeman/op_type"
"git.zhangdeman.cn/zhangdeman/serialize"
"git.zhangdeman.cn/zhangdeman/wrapper/define"
)
// ToBaseTypeSlice 基础数据类型的列表
// splitChar 没有用字符串表示的原因: 存在场景, 使用空字符串风格字符串, 空字符串是有意义的
func ToBaseTypeSlice[BaseType op_type.BaseType](str string, splitChar ...string) define.BaseValueSliceResult[BaseType] {
var (
err error
sliceValue []BaseType
)
if len(splitChar) == 0 {
// 序列化数组直接转换
if err = serialize.JSON.UnmarshalWithNumberForString(str, &sliceValue); nil != err {
return define.BaseValueSliceResult[BaseType]{Value: []BaseType{}, Err: err}
}
return define.BaseValueSliceResult[BaseType]{Value: sliceValue, Err: nil}
}
// 按照分隔符转换
strArr := strings.Split(str, splitChar[0])
for _, v := range strArr {
itemConvertRes := ToBaseValue[BaseType](v)
if nil != itemConvertRes.Err {
return define.BaseValueSliceResult[BaseType]{Value: []BaseType{}, Err: itemConvertRes.Err}
}
sliceValue = append(sliceValue, itemConvertRes.Value)
}
return define.BaseValueSliceResult[BaseType]{Value: sliceValue, Err: nil}
}
// ToMapSlice map类型的列表
func ToMapSlice[Key comparable, Value any](str string) define.MapValueSliceResult[Key, Value] {
res := define.MapValueSliceResult[Key, Value]{Value: []map[Key]Value{}, Err: nil}
res.Err = serialize.JSON.UnmarshalWithNumberForString(str, &res.Value)
return res
}
// ToStructSlice 结构体类型的列表
func ToStructSlice[Value any](str string) define.StructValueSliceResult[Value] {
res := define.StructValueSliceResult[Value]{Value: []Value{}, Err: nil}
res.Err = serialize.JSON.UnmarshalWithNumberForString(str, &res.Value)
return res
}