# Field Field 包封装了一个抽象的`Field`结构体,提供了操作`struct`属性的相关函数
## 源码: - [https://github.com/duke-git/lancet/blob/main/structs/field.go](https://github.com/duke-git/lancet/blob/main/structs/field.go) ## 用法: ```go import ( "github.com/duke-git/lancet/v2/structs" ) ``` ## 目录: - [Tag](#Tag) - [Name](#Name) - [Value](#Value) - [Kind](#Kind) - [IsEmbedded](#IsEmbedded) - [IsExported](#IsExported) - [IsZero](#IsZero) - [IsSlice](#IsSlice) > 注意:由于`Field`继承于`Struct`,所以同样拥有`Struct`所有方法,如下: - [ToMap](https://github.com/duke-git/lancet/blob/main/docs/structs/struct_zh-CN.md#ToMap) - [Fields](https://github.com/duke-git/lancet/blob/main/docs/structs/struct_zh-CN#Fields) - [Field](https://github.com/duke-git/lancet/blob/main/docs/structs/struct_zh-CN#Field) - [IsStruct](https://github.com/duke-git/lancet/blob/main/docs/structs/struct_zh-CN#IsStruct) ## API 文档: ### Tag获取`Field`的`Tag`,默认的tag key是json
函数签名: ```go func (f *Field) Tag() *Tag ``` 示例: ```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获取`Field`属性的值
函数签名: ```go func (f *Field) Value() any ``` 示例: ```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判断属性是否为嵌入
函数签名: ```go func (f *Field) IsEmbedded() bool ``` 示例: ```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判断属性是否导出
函数签名: ```go func (f *Field) IsExported() bool ``` 示例: ```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判断属性是否为零值
函数签名: ```go func (f *Field) IsZero() bool ``` 示例: ```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获取属性名
函数签名: ```go func (f *Field) Name() string ``` 示例: ```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获取属性Kind
函数签名: ```go func (f *Field) Kind() reflect.Kind ``` 示例: ```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 } ``` ### IsSlice判断属性是否是切片
函数签名: ```go func (f *Field) IsSlice() bool ``` 示例: ```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 } ```