mirror of
https://github.com/charlienet/go-mixed.git
synced 2025-07-18 08:32:40 +08:00
名称转换
This commit is contained in:
@ -28,7 +28,7 @@ func ToMap(o any, opts ...optionFunc) map[string]any {
|
||||
continue
|
||||
}
|
||||
|
||||
m[field.name] = source.Interface()
|
||||
m[opt.NameFunc(field.name)] = source.Interface()
|
||||
}
|
||||
|
||||
return m
|
||||
|
@ -8,12 +8,12 @@ import (
|
||||
|
||||
func TestStructToMap(t *testing.T) {
|
||||
o := struct {
|
||||
Abc string
|
||||
UserName string
|
||||
InTagName string `json:"in_tag_name,omitempty"`
|
||||
KeepEmpty int
|
||||
OmitEmpty int `json:",omitempty"`
|
||||
}{
|
||||
Abc: "测试字段",
|
||||
UserName: "测试字段",
|
||||
InTagName: "具体名称",
|
||||
KeepEmpty: 0,
|
||||
OmitEmpty: 0,
|
||||
@ -22,4 +22,6 @@ func TestStructToMap(t *testing.T) {
|
||||
t.Log(structs.ToMap(o))
|
||||
t.Log(structs.ToMap(o, structs.IgnoreEmpty()))
|
||||
t.Log(structs.ToMap(o, structs.Omitempty()))
|
||||
t.Log(structs.ToMap(o, structs.Lcfirst()))
|
||||
t.Log(structs.ToMap(o, structs.Camel2Case()))
|
||||
}
|
||||
|
@ -2,11 +2,14 @@ package structs
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
|
||||
"github.com/charlienet/go-mixed/json"
|
||||
)
|
||||
|
||||
type optionFunc func(*option)
|
||||
|
||||
type option struct {
|
||||
NameFunc func(string) string
|
||||
IgnoreEmpty bool
|
||||
DeepCopy bool
|
||||
Omitempty bool
|
||||
@ -30,8 +33,23 @@ func Omitempty() optionFunc {
|
||||
}
|
||||
}
|
||||
|
||||
func Lcfirst() optionFunc {
|
||||
return func(o *option) {
|
||||
o.NameFunc = json.Lcfirst
|
||||
}
|
||||
}
|
||||
|
||||
func Camel2Case() optionFunc {
|
||||
return func(o *option) {
|
||||
o.NameFunc = json.Camel2Case
|
||||
}
|
||||
}
|
||||
|
||||
func createOptions(opts []optionFunc) *option {
|
||||
o := &option{}
|
||||
o := &option{
|
||||
NameFunc: func(s string) string { return s },
|
||||
}
|
||||
|
||||
for _, f := range opts {
|
||||
f(o)
|
||||
}
|
||||
@ -42,4 +60,3 @@ func createOptions(opts []optionFunc) *option {
|
||||
func shouldIgnore(v reflect.Value, ignoreEmpty bool) bool {
|
||||
return ignoreEmpty && v.IsZero()
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user