无论如何,有没有办法将两个通用模型合并为一个

use*_*676 6 generics go

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"`         
}
Run Code Online (Sandbox Code Playgroud)

我有两个模型“TodoUpdateLog”和“TodoUpdateRequest”,这两个模型都有相同的字段和相同的 json 标签。两种型号之间的区别仅在于类型

现在我想将两个模型合并为一个,有什么方法可以实现这一点吗?

Zac*_*ung 0

拥有单一类型并在两个不同的上下文中使用它(用其命名)怎么样?

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)
}
Run Code Online (Sandbox Code Playgroud)