# Structs Struct is abstract struct for provide several high level functions
## Source: - [https://github.com/duke-git/lancet/blob/main/structs/struct.go](https://github.com/duke-git/lancet/blob/main/structs/struct.go) - [https://github.com/duke-git/lancet/blob/main/structs/field.go](https://github.com/duke-git/lancet/blob/main/structs/field.go)
## Usage: ```go import ( "github.com/duke-git/lancet/v2/structs" ) ```
## Index: - [New](#New) - [ToMap](#ToMap) - [Fields](#Fields) - [Field](#Field) - [IsStruct](#IsStruct) - [Tag](#Tag) - [Name](#Name) - [TypeName](#TypeName) - [Value](#Value) - [Kind](#Kind) - [IsEmbedded](#IsEmbedded) - [IsExported](#IsExported) - [IsZero](#IsZero) - [IsSlice](#IsSlice) - [IsTargetType](#IsTargetType)
## Documentation: ### New

The constructor function of the `Struct`

Signature: ```go func New(value any, tagName ...string) *Struct ``` Example:[Run](https://go.dev/play/p/O29l8kk-Z17) ```go 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.ToMap()) // Output: // map[name:11] } ``` ### ToMap

convert a valid struct to a map

Signature: ```go func (s *Struct) ToMap() (map[string]any, error) ``` > In addition, provided a convenient static function ToMap ```go func ToMap(v any) (map[string]any, error) ``` Example:[Run](https://go.dev/play/p/qQbLySBgerZ) ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/structs" ) func main() { type People struct { Name string `json:"name"` } p1 := &People{Name: "11"} // use constructor function s1 := structs.New(p1) m1, _ := s1.ToMap() fmt.Println(m1) // use static function m2, _ := structs.ToMap(p1) fmt.Println(m2) // Output: // map[name:11] // map[name:11] } ``` ### Fields

Get all fields of a given struct, that the fields are abstract struct field

Signature: ```go func (s *Struct) Fields() []*Field ``` Example:[Run](https://go.dev/play/p/w3Kk_CyVY7D) ```go 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 } ``` ### Field

Get an abstract field of a struct by given field name

Signature: ```go func (s *Struct) Field(name string) (*Field, bool) ``` Example:[Run](https://go.dev/play/p/KocZMSYarza) ```go 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, found := s.Field("Name") fmt.Println(f.Value()) fmt.Println(found) // Output: // 11 // true } ``` ### IsStruct

Check if the struct is valid

Signature: ```go func (s *Struct) IsStruct() bool ``` Example:[Run](https://go.dev/play/p/bU2FSdkbK1C) ```go 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 } ``` ### Tag

Get a `Tag` of the `Field`, `Tag` is a abstract struct field tag

Signature: ```go func (f *Field) Tag() *Tag ``` Example:[Run](https://go.dev/play/p/DVrx5HvvUJr) ```go 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 } ``` ### Value

Get the `Field` underlying value

Signature: ```go func (f *Field) Value() any ``` Example:[Run](https://go.dev/play/p/qufYEU2o4Oi) ```go 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 } ``` ### IsEmbedded

Check if the field is an embedded field

Signature: ```go func (f *Field) IsEmbedded() bool ``` Example:[Run](https://go.dev/play/p/wV2PrbYm3Ec) ```go 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 } ``` ### IsExported

Check if the field is exported

Signature: ```go func (f *Field) IsExported() bool ``` Example:[Run](https://go.dev/play/p/csK4AXYaNbJ) ```go 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 } ``` ### IsZero

Check if the field is zero value

Signature: ```go func (f *Field) IsZero() bool ``` Example:[Run](https://go.dev/play/p/RzqpGISf87r) ```go 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 } ``` ### Name

Get the field name

Signature: ```go func (f *Field) Name() string ``` Example:[Run](https://go.dev/play/p/zfIGlqsatee) ```go 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

Get the field's kind

Signature: ```go func (f *Field) Kind() reflect.Kind ``` Example:[Run](https://go.dev/play/p/wg4NlcUNG5o) ```go 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 } ``` ### TypeName

Return struct type name.

Signature: ```go func (s *Struct) TypeName() string ``` Example:[Run](https://go.dev/play/p/SWLWd0XBaBb) ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/structs" ) func main() { type Parent struct { Name string Age int } p := &Parent{Age: 11} s := structs.New(p) fmt.Println(s.TypeName()) // Output: // Parent } ``` ### IsSlice

Check if the field is a slice

Signature: ```go func (f *Field) IsSlice() bool ``` Example:[Run](https://go.dev/play/p/MKz4CgBIUrU) ```go 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 } ``` ### IsTargetType

check if a struct field type is target type or not

Signature: ```go func (f *Field) IsTargetType(targetType reflect.Kind) bool ``` Example:[Run](https://go.dev/play/p/Ig75P-agN39) ```go package main import ( "fmt" "reflect" "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) n, _ := s.Field("Name") a, _ := s.Field("arr") fmt.Println(n.IsTargetType(reflect.String)) fmt.Println(a.IsTargetType(reflect.Slice)) // Output: // true // true } ```