提问人:Iman pakseresht 提问时间:11/11/2023 更新时间:11/11/2023 访问量:30
golang 模型中的可选额外信息
Optional Extra Info in golang Model
问:
我在 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
}
有不同的类别,我想要的是接收某些类别的文档中以外的信息。例如,当类别为墙实例时,还应采用墙的大小和结构。 它存在于某些类别中,默认情况下,每个类别都应收到文档中其他信息以外的其他信息。 我的问题是,我该如何实现这个问题?
答:
0赞
hmmftg
11/11/2023
#1
您可以使用泛型实现此目的:
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}
评论