我在golang中为后端实现了三个模型 类别、产品和文档 模型定义如下
type Category struct {
ID uint
Title string
Products []*Product
}
type Product struct {
ID uint
Name string
CategoryID uint
Documents []*Document
}
type Document struct {
ID uint
Title string
MimeType string
Url string
ProductID uint
}
有不同的类别,我想要的是接收除某些类别的文档中的信息之外的信息。例如,当类别为墙实例时,还应考虑墙的尺寸和结构。 它存在于某些类别中,每个类别都应该接收除默认文档中的内容之外的附加信息。 我的问题是,我该如何解决这个问题?
您可以使用泛型来实现这一点:
package main
import "fmt"
type Wall struct {
Size int
Structure string
}
type Category[Spec any] struct {
ID uint
Title string
Products []*Product[Spec]
}
func (s Category[Spec]) Dump() {
fmt.Printf("%+v\n(", s)
for id := range s.Products {
s.Products[id].Dump()
}
}
type Product[Spec any] struct {
ID uint
Name string
CategoryID uint
Documents []*Document[Spec]
}
func (p Product[Spec]) Dump() {
fmt.Printf("%+v\n(", p)
for id := range p.Documents {
fmt.Printf("%+v\n(", p.Documents[id])
}
}
type Document[Spec any] struct {
Spec Spec
ID uint
Title string
MimeType string
Url string
ProductID uint
}
func main() {
wall := Category[Wall]{
ID: 1,
Title: "a",
Products: []*Product[Wall]{{
ID: 1,
Name: "b",
CategoryID: 1,
Documents: []*Document[Wall]{{
Spec: Wall{
Size: 12,
Structure: "c",
},
ID: 1,
Title: "d",
MimeType: "e",
Url: "https://f.com",
ProductID: 1,
}},
}},
}
wall.Dump()
}
输出:
{ID:1 Title:a Products:[0xc00007c040]}
({ID:1 Name:b CategoryID:1 Documents:[0xc000066180]}
(&{Spec:{Size:12 Structure:c} ID:1 Title:d MimeType:e Url:https://f.com ProductID:1}