package controls import ( "encoding/json" "git.sxidc.com/go-tools/utils/strutils" ) type InfoStruct interface { BankInfo } // 银行控件 type BankInfo struct { ID string `json:"id"` Name string `json:"name"` Code string `json:"code"` } func ExtractInfo[T InfoStruct](infoStr string) (*T, error) { info := new(T) if strutils.IsStringEmpty(infoStr) { return info, nil } err := json.Unmarshal([]byte(infoStr), info) if err != nil { return nil, err } return info, nil } type InfosStruct interface { ProjectInfo | DeptInfo } // 项目控件 type ProjectInfo struct { ID string `json:"id"` Name string `json:"name"` } // 部门控件 type DeptInfo struct { Type string `json:"type"` ID string `json:"subjectId"` Name string `json:"name"` } func ExtractInfoFormInfos[T InfosStruct](infosStr string) (*T, error) { infos, err := ExtractInfos[T](infosStr) if err != nil { return nil, err } if infos == nil || len(infos) == 0 { var info T return &info, nil } return &infos[0], nil } func ExtractInfos[T InfosStruct](infosStr string) ([]T, error) { infos := make([]T, 0) if strutils.IsStringEmpty(infosStr) { return infos, nil } err := json.Unmarshal([]byte(infosStr), &infos) if err != nil { return nil, err } return infos, nil }