golang模版式struct构造初始化

直接上git地址:

https://github.com/pkgng/structor

https://github.com/pkgng/copit

第二个是简单相同名字字段copy的库,也可以定义字段计算方法,但是只支持接受一个字段。

第一个链接是通过struct Tag自定义字段计算方法的,语法是javaScrip,非常好用。

记得给作者Star 哦!

 

Demo 源代码:

package main

import (
	"encoding/json"
	"fmt"

	"github.com/pkgng/structor"
)

type Human struct {
	Name  string
	Role  string
	Age   *int32
	Tel   string
	Notes []string
	Flags string
}

type AddressT struct {
	Address string
	Adcode  string
	Gps     string
}

type WifeT struct {
	structor.BaseStructor `structor:"CopyByName,Wife"`
	Name                  string
	NickName              string `structor:"Wife.Name.toLocaleLowerCase()"`
	Age                   int
	Age3                  int32 `structor:"self.Age + 3"`
}

type Farmer struct {
	structor.BaseStructor `structor:"CopyByName,Human,address"`
	Name                  string
	Age                   int64
	Nickname              string   `structor:"self.Name.toLocaleLowerCase()"`
	DoubleAge             int32    `structor:"Human.Age * 2"`
	SuperRole             string   `structor:"'Farmer-' + Human.Role"`
	Notes                 []string `structor:"Human.Notes.reverse()"`
	Flags                 []string `structor:"Human.Flags.split(',')"`
	Contact               struct {
		Tel     string `structor:"Human.Tel"`
		Address string `structor:"address.Address"`
		Adcode  string `structor:"address.Adcode"`
	}
	Wife WifeT
}

func main() {
	var age int32 = 23
	var age2 int32 = 22
	man := Human{Name: "LiLei", Age: &age, Tel: "18611009988", Role: "Farmer", Notes: []string{"hello", "world"}, Flags: "a,b,c"}
	address := AddressT{Adcode: "110108", Address: "北京海淀区五道口优盛大厦D座", Gps: "116.328115,40.054629"}
	wife := Human{Name: "HanMeiMei", Age: &age2, Role: "Wife", Notes: []string{"hello", "world"}, Flags: "e,f,g"}

	farmer := Farmer{}
	structor.New().Set("Human", &man).Set("address", address).Set("Wife", &wife).Construct(&farmer)

	// fmt.Printf("%#v\n", farmer)

	b, err := json.Marshal(farmer)
	if err != nil {
		fmt.Println("JSON ERR:", err)
	}
	fmt.Println(string(b))
}

Demo 结果:

	{
		"Name":"LiLei",
		"Age":23,
		"Nickname":"lilei",
		"DoubleAge":46,
		"SuperRole":"Farmer-Farmer",
		"Notes":["world","hello"],
		"Flags":["a","b","c"],
		"Contact":{
			"Tel":"18611009988",
			"Address":"北京海淀区五道口优盛大厦D座",
			"Adcode":"110108"
		},
		"Wife":{
			"Name":"HanMeiMei",
			"NickName":"hanmeimei",
			"Age":22,
			"Age3":25
		}
	}

 

 

 

总结:

很多web 数据api开发时需要根据各种数据表model组合出返回前端的结构,有的需要对字段做裁剪,有的需要修改格式,有的需要经过简单计算等,有了这个工具不用在一个一个写了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值