structs

package module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 10, 2021 License: MIT Imports: 3 Imported by: 4

README

structs

print struct without zero value fields.

Build Status Coverage Status Go Report Card Documentation

Install

$ go get github.com/lovego/structs

Documentation

https://godoc.org/github.com/lovego/structs

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Println

func Println(structs ...interface{})

Println print a struct without zero value fields.

Example
type c struct {
	C int
}
type D struct {
	D int
}
var s = struct {
	A int
	B string
	C c
	D
	E c
}{
	A: 1, B: "", C: c{C: 3}, D: D{D: 4},
}
Println(s)
Output:

{A:1 C:{C:3} D:{D:4}}
Example (NilStringer)
t := time.Date(2019, 1, 2, 10, 11, 12, 0, time.UTC)

Println(struct{ Time *time.Time }{})
Println(struct{ Time *time.Time }{&t})
Output:

{}
{Time:2019-01-02 10:11:12 +0000 UTC}

func ShallowCopy

func ShallowCopy(src interface{}) interface{}

ShallowCopy shallow copy a struct

Example
type T struct{ A, B, c int }
src := T{99, 88, 97}
copy := ShallowCopy(src).(T)

fmt.Println(copy, &src == &copy)
Output:

{99 88 0} false

func ShallowCopyV

func ShallowCopyV(src reflect.Value) reflect.Value

ShallowCopyV shallow copy a struct value

func Sprint

func Sprint(strct interface{}) string

func Traverse

func Traverse(
	val reflect.Value,
	convertNilPtr bool,
	skip func(val reflect.Value, field reflect.StructField) bool,
	fn func(val reflect.Value, field reflect.StructField) bool,
) bool

Traverse traverses a reflect.Value convertNilPtr: convert anonymous nil struct pointer to non-nil or not. nil pointer to anonymous unexported struct fields are not traversed by Traverse,

Example
value := getTestValue()
Traverse(reflect.ValueOf(value), true, nil, func(v reflect.Value, f reflect.StructField) bool {
	fmt.Println(f.Name)
	switch v.Kind() {
	case reflect.Int:
		v.SetInt(8)
	case reflect.String:
		v.SetString(f.Name)
	case reflect.Bool:
		v.SetBool(true)
		return false
	}
	return true
})
fmt.Println(regexp.MustCompile("0x[0-9a-f]+").ReplaceAllLiteralString(
	fmt.Sprintf("%+v", value),
	fmt.Sprintf("%+v", reflect.ValueOf(value).Elem().FieldByName("T5")),
))
Output:

T1
T2
T3
T4
T5
Stop
&{T1:T1 T2:{T2:T2} t3:{T3:T3} T4:8 T5:&{T5:T5} t6:<nil> Stop:true AfterStop: notExported:0}

func TraverseType

func TraverseType(
	typ reflect.Type,
	skip func(field reflect.StructField) bool,
	fn func(field reflect.StructField),
	index ...int,
)

TraverseType traverses a reflect.Type but pointer to anonymous unexported struct fields are always traversed by TraverseType.

Example
TraverseType(reflect.TypeOf(getTestValue()), nil, func(f reflect.StructField) {
	fmt.Println(f.Name, f.Index)
})
Output:

T1 [0]
T2 [1 0]
T3 [2 0]
T4 [3]
T5 [4 0]
T6 [5 0]
Stop [6]
AfterStop [7]

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL