package main

//
// 主要用于 struct 转 map
// 还可以判断结构体是否有空属性等功能
//

import (
	"fmt"
	"github.com/fatih/structs"
)

// struct --> map

type Stu struct {
	Name string
	Age  int
}

func main() {
	// 创建一个 Age 属性为空的 struct 实例
	u1 := Stu{
		Name: "Tim",
	}

	var u2 Stu

	// 判断是否为结构体
	isStruct := structs.IsStruct(u1)
	fmt.Println(isStruct)

	// 判断 struct 是否为空 --> false
	isZero := structs.IsZero(u2)
	fmt.Println(isZero)

	// 是否有空属性 --> true
	hasZero := structs.HasZero(u1)
	fmt.Println(hasZero)

	// 获取 structName  --> Stu
	structName := structs.Name(u1)
	fmt.Println(structName)

	// 获取 struct 所有属性名 --> [Name Age]
	names := structs.Names(u1)
	fmt.Println(names)

	// 获得 属性对应的值 --> [Tim 0]
	values := structs.Values(u1)
	fmt.Println(values)

	// 转成 map
	m := structs.Map(u1)
	for _, v := range m {
		fmt.Printf("%T , %[1]v\n", v)
	}
}