Go语言 有没有办法将两个通用模型合并为一个

k5ifujac  于 2023-08-01  发布在  Go
关注(0)|答案(2)|浏览(94)
type TodoUpdateLog struct {
    ID               uint                   `json:"id"`
    Name             Range[string]          `json:"name,omitempty"`
    Status           Range[string]          `json:"status,omitempty"`
    Desc             Range[json.RawMessage] `json:"desc,omitempty"`              
    Priority         Range[string]          `json:"priority,omitempty"`          
    EstimatedStartDT Range[time.Time]       `json:"estimate_start_dt,omitempty"` 
    EstimatedEndDT   Range[time.Time]       `json:"estimate_end_dt,omitempty"`   
    Owners           Range[[]string]        `json:"owners,omitempty"`            
    Followers        Range[[]string]        `json:"followers,omitempty"`         
}

type TodoUpdateRequest struct {
    ID               uint                      `json:"id"`
    Name             Optional[string]          `json:"name,omitempty"` 
    Status           Optional[string]          `json:"status,omitempty"`
    Desc             Optional[json.RawMessage] `json:"desc,omitempty"`              
    Priority         Optional[string]          `json:"priority,omitempty"`          
    EstimatedStartDT Optional[time.Time]       `json:"estimate_start_dt,omitempty"` 
    EstimatedEndDT   Optional[time.Time]       `json:"estimate_end_dt,omitempty"`   
    Owners           Optional[[]string]        `json:"owners,omitempty"`            
    Followers        Optional[[]string]        `json:"followers,omitempty"`         
}

type TodoUpdate[T any] struct {
    ID               uint                      `json:"id"`
    Name             T[string]          `json:"name,omitempty"` 
    Status           T[string]          `json:"status,omitempty"`
    Desc             T[json.RawMessage] `json:"desc,omitempty"`              
    Priority         T[string]          `json:"priority,omitempty"`          
    EstimatedStartDT T[time.Time]       `json:"estimate_start_dt,omitempty"` 
    EstimatedEndDT   T[time.Time]       `json:"estimate_end_dt,omitempty"`   
    Owners           T[[]string]        `json:"owners,omitempty"`            
    Followers        T[[]string]        `json:"followers,omitempty"`         
}

字符串
我有两个模型“TodoUpdateLog”和“TodoUpdateRequest”,这两个模型都有相同的字段和相同的json标签。两种型号的区别只是型号不同
现在我想把两种模式合二为一,有没有办法做到。

yhxst69z

yhxst69z1#

如果有一个类型,并在两个不同的上下文中使用它(用命名)呢?

type TodoUpdateLogOrRequest struct {
    ID               uint                   `json:"id"`
    Name             Range[string]          `json:"name,omitempty"`
    Status           Range[string]          `json:"status,omitempty"`
    Desc             Range[json.RawMessage] `json:"desc,omitempty"`              
    Priority         Range[string]          `json:"priority,omitempty"`          
    EstimatedStartDT Range[time.Time]       `json:"estimate_start_dt,omitempty"` 
    EstimatedEndDT   Range[time.Time]       `json:"estimate_end_dt,omitempty"`   
    Owners           Range[[]string]        `json:"owners,omitempty"`            
    Followers        Range[[]string]        `json:"followers,omitempty"`         
}


func main() {
    var updateLog, updateRequest TodoUpdateLogOrRequest
    fmt.Println(updateLog, updateRequest)
}

字符串

xienkqul

xienkqul2#

创建一个泛型类型怎么样?

type Range[T any] any
type Optional[T any] any

type Type[T any] interface {
 Range[T] | Optional[T]
}

字符串

相关问题