import{_ as l,o as p,c as o,k as s,a as n,X as a}from"./chunks/framework.6e839c56.js";const k=JSON.parse('{"title":"Structs","description":"","frontmatter":{},"headers":[],"relativePath":"api/packages/struct.md","filePath":"api/packages/struct.md"}'),e={name:"api/packages/struct.md"},t=s("h1",{id:"Structs",tabindex:"-1"},[n("Structs "),s("a",{class:"header-anchor",href:"#Structs","aria-label":'Permalink to "Structs"'},"")],-1),c=s("p",null,[n("structs 包封装了一个抽象的"),s("code",null,"Struct"),n("结构体,提供了操作"),s("code",null,"struct"),n("的相关函数")],-1),r=s("div",{STYLE:"page-break-after: always;"},null,-1),y=s("h2",{id:"源码-",tabindex:"-1"},[n("源码: "),s("a",{class:"header-anchor",href:"#源码-","aria-label":'Permalink to "源码:"'},"")],-1),F=s("ul",null,[s("li",null,[s("p",null,[s("a",{href:"https://github.com/duke-git/lancet/blob/main/structs/struct.go",target:"_blank",rel:"noreferrer"},"https://github.com/duke-git/lancet/blob/main/structs/struct.go")])]),s("li",null,[s("p",null,[s("a",{href:"https://github.com/duke-git/lancet/blob/main/structs/field.go",target:"_blank",rel:"noreferrer"},"https://github.com/duke-git/lancet/blob/main/structs/field.go")])])],-1),i=s("div",{STYLE:"page-break-after: always;"},null,-1),A=a(`
import (
"github.com/duke-git/lancet/v2/structs"
)import (
"github.com/duke-git/lancet/v2/structs"
)\`Struct\`结构体的构造函数
函数签名:
func New(value any, tagName ...string) *Structfunc New(value any, tagName ...string) *Struct示例:
package main
import (
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s := structs.New(p1)
// to do something
}package main
import (
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s := structs.New(p1)
// to do something
}将一个合法的struct对象转换为map[string]any
函数签名:
func (s *Struct) ToMap() (map[string]any, error)func (s *Struct) ToMap() (map[string]any, error)除此之外,提供一个便捷的静态方法 ToMap
func ToMap(v any) (map[string]any, error)func ToMap(v any) (map[string]any, error)示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s1 := structs.New(p1)
m1, _ := s1.ToMap()
fmt.Println(m1)
// 如果不需要Struct更多的方法,可以直接使用ToMap
m2, _ := structs.ToMap(p1)
fmt.Println(m2)
// Output:
// map[name:11]
// map[name:11]
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s1 := structs.New(p1)
m1, _ := s1.ToMap()
fmt.Println(m1)
// 如果不需要Struct更多的方法,可以直接使用ToMap
m2, _ := structs.ToMap(p1)
fmt.Println(m2)
// Output:
// map[name:11]
// map[name:11]
}获取一个struct对象的属性列表
函数签名:
func (s *Struct) Fields() []*Fieldfunc (s *Struct) Fields() []*Field示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s := structs.New(p1)
fields := s.Fields()
fmt.Println(len(fields))
// Output:
// 1
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s := structs.New(p1)
fields := s.Fields()
fmt.Println(len(fields))
// Output:
// 1
}根据属性名获取一个struct对象的属性
函数签名:
func (s *Struct) Field(name string) *Fieldfunc (s *Struct) Field(name string) *Field示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s := structs.New(p1)
f := s.Field("Name")
fmt.Println(f.Value())
// Output:
// 11
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s := structs.New(p1)
f := s.Field("Name")
fmt.Println(f.Value())
// Output:
// 11
}判断是否为一个合法的struct对象
函数签名:
func (s *Struct) IsStruct() boolfunc (s *Struct) IsStruct() bool示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s := structs.New(p1)
fmt.Println(s.IsStruct())
// Output:
// true
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type People struct {
Name string \`json:"name"\`
}
p1 := &People{Name: "11"}
s := structs.New(p1)
fmt.Println(s.IsStruct())
// Output:
// true
}获取\`Field\`的\`Tag\`,默认的tag key是json
函数签名:
func (f *Field) Tag() *Tagfunc (f *Field) Tag() *Tag示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string \`json:"name,omitempty"\`
}
p1 := &Parent{"111"}
s := structs.New(p1)
n, _ := s.Field("Name")
tag := n.Tag()
fmt.Println(tag.Name)
// Output:
// name
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string \`json:"name,omitempty"\`
}
p1 := &Parent{"111"}
s := structs.New(p1)
n, _ := s.Field("Name")
tag := n.Tag()
fmt.Println(tag.Name)
// Output:
// name
}获取\`Field\`属性的值
函数签名:
func (f *Field) Value() anyfunc (f *Field) Value() any示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string \`json:"name,omitempty"\`
}
p1 := &Parent{"111"}
s := structs.New(p1)
n, _ := s.Field("Name")
fmt.Println(n.Value())
// Output:
// 111
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string \`json:"name,omitempty"\`
}
p1 := &Parent{"111"}
s := structs.New(p1)
n, _ := s.Field("Name")
fmt.Println(n.Value())
// Output:
// 111
}判断属性是否为嵌入
函数签名:
func (f *Field) IsEmbedded() boolfunc (f *Field) IsEmbedded() bool示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
}
type Child struct {
Parent
Age int
}
c1 := &Child{}
c1.Name = "111"
c1.Age = 11
s := structs.New(c1)
n, _ := s.Field("Name")
a, _ := s.Field("Age")
fmt.Println(n.IsEmbedded())
fmt.Println(a.IsEmbedded())
// Output:
// true
// false
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
}
type Child struct {
Parent
Age int
}
c1 := &Child{}
c1.Name = "111"
c1.Age = 11
s := structs.New(c1)
n, _ := s.Field("Name")
a, _ := s.Field("Age")
fmt.Println(n.IsEmbedded())
fmt.Println(a.IsEmbedded())
// Output:
// true
// false
}判断属性是否导出
函数签名:
func (f *Field) IsExported() boolfunc (f *Field) IsExported() bool示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
age int
}
p1 := &Parent{Name: "11", age: 11}
s := structs.New(p1)
n, _ := s.Field("Name")
a, _ := s.Field("age")
fmt.Println(n.IsExported())
fmt.Println(a.IsExported())
// Output:
// true
// false
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
age int
}
p1 := &Parent{Name: "11", age: 11}
s := structs.New(p1)
n, _ := s.Field("Name")
a, _ := s.Field("age")
fmt.Println(n.IsExported())
fmt.Println(a.IsExported())
// Output:
// true
// false
}判断属性是否为零值
函数签名:
func (f *Field) IsZero() boolfunc (f *Field) IsZero() bool示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
Age int
}
p1 := &Parent{Age: 11}
s := structs.New(p1)
n, _ := s.Field("Name")
a, _ := s.Field("Age")
fmt.Println(n.IsZero())
fmt.Println(a.IsZero())
// Output:
// true
// false
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
Age int
}
p1 := &Parent{Age: 11}
s := structs.New(p1)
n, _ := s.Field("Name")
a, _ := s.Field("Age")
fmt.Println(n.IsZero())
fmt.Println(a.IsZero())
// Output:
// true
// false
}获取属性名
函数签名:
func (f *Field) Name() stringfunc (f *Field) Name() string示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
Age int
}
p1 := &Parent{Age: 11}
s := structs.New(p1)
n, _ := s.Field("Name")
a, _ := s.Field("Age")
fmt.Println(n.Name())
fmt.Println(a.Name())
// Output:
// Name
// Age
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
Age int
}
p1 := &Parent{Age: 11}
s := structs.New(p1)
n, _ := s.Field("Name")
a, _ := s.Field("Age")
fmt.Println(n.Name())
fmt.Println(a.Name())
// Output:
// Name
// Age
}获取属性Kind
函数签名:
func (f *Field) Kind() reflect.Kindfunc (f *Field) Kind() reflect.Kind示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
Age int
}
p1 := &Parent{Age: 11}
s := structs.New(p1)
n, _ := s.Field("Name")
a, _ := s.Field("Age")
fmt.Println(n.Kind())
fmt.Println(a.Kind())
// Output:
// string
// int
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
Age int
}
p1 := &Parent{Age: 11}
s := structs.New(p1)
n, _ := s.Field("Name")
a, _ := s.Field("Age")
fmt.Println(n.Kind())
fmt.Println(a.Kind())
// Output:
// string
// int
}判断属性是否是切片
函数签名:
func (f *Field) IsSlice() boolfunc (f *Field) IsSlice() bool示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
arr []int
}
p1 := &Parent{arr: []int{1, 2, 3}}
s := structs.New(p1)
a, _ := s.Field("arr")
fmt.Println(a.IsSlice())
// Output:
// true
}package main
import (
"fmt"
"github.com/duke-git/lancet/v2/structs"
)
func main() {
type Parent struct {
Name string
arr []int
}
p1 := &Parent{arr: []int{1, 2, 3}}
s := structs.New(p1)
a, _ := s.Field("arr")
fmt.Println(a.IsSlice())
// Output:
// true
}