map2struct 使用方法
自动生成 map 到结构的转换代码,支持的 map value 类型有:基本类型 + interface{}
待生成函数签名要求:入参必须有 map[string]xxx
类型(只用第一个),返回值第一个必须是待转换的结构体
1. 下载 map2struct
go get github.com/adyzng/gotool/cmd/map2struct@latest
go install github.com/adyzng/gotool/cmd/map2struct@latest
2. 在工程目录下配置 go:generate
// 示例文件: map2struct.go
package gen
import (
"context"
"github.com/adyzng/xxx/common_base"
)
//go:generate map2struct
// 会枚举此文件中的所有`MapTo`开头的 function, 在 _gen.go 文件中生成对应的转换函数
// 函数签名要求:入参必须有`map[string]xxx`类型(只用第一个),返回值第一个必须是待转换的结构体(可以有多个返回值)
// 直接命令行也行(需要在当前工程目录下): map2struct -input="./gen/map2struct.go"
func MapToApiItemInfo(src map[string]string) *common_base.ApiItemInfo {
return nil
}
// map[string]interface{} 也可以支持
func MapToApiItemInfo2(src map[string]interface{}) (*common_base.ApiItemInfo, error) {
return nil, nil
}
func MapToApiItemInfo3(src map[string]string, param interface{}) (*common_base.ApiItemInfo, error) {
return nil, nil
}
func MapToApiBookInfo(ctx context.Context, isWeb bool, src map[string]string) (*common_base.ApiBookInfo, error) {
return nil, nil
}
3. 运行 go generate
// 生成代码如下:map2struct_gen.go
// Auto generated code, DO NOT EDIT.
package gen
import "github.com/adyzng/xxx/common_base"
func genMapToApiItemInfo(src map[string]string) (obj *common_base.ApiItemInfo, err error) {
obj = &common_base.ApiItemInfo{}
...
return obj, err
}
func genMapToApiBookInfo(src map[string]string) (obj *common_base.ApiBookInfo, err error) {
obj = &common_base.ApiBookInfo{}
...
return obj, err
}