1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00
Files
lancet/docs/structs/field_zh-CN.md
zm 5e66bc6227 [structs] change package structutil to structs (#81)
* refactor package structutil to structs

* add structs package zh-CN docs
2023-03-15 19:14:19 +08:00

4.9 KiB
Raw Blame History

Field

Field 包封装了一个抽象的Field结构体,提供了操作struct属性的相关函数

源码:

用法:

import (
    "github.com/duke-git/lancet/v2/structs"
)

目录:

注意:由于Field继承于Struct,所以同样拥有Struct所有方法,如下:

API 文档:

Tag

获取`Field`的`Tag`默认的tag key是json

函数签名:

func (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
}

Value

获取`Field`属性的值

函数签名:

func (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
}

IsEmbedded

判断属性是否为嵌入

函数签名:

func (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
}

IsExported

判断属性是否导出

函数签名:

func (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
}

IsZero

判断属性是否为零值

函数签名:

func (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
}

Name

获取属性名

函数签名:

func (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
}

Kind

获取属性Kind

函数签名:

func (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
}

IsSlice

判断属性是否是切片

函数签名:

func (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
}