我有多个具有一个公共字段的结构;我们在这里common
type Struct1 struct {
foo string
bar string
common string
}
type Struct2 struct {
baz int
qux string
common string
}
我想创建一个函数,该函数将一个Interface
作为输入并使common
无效。可用的结构类型在编译时将不知道,因此我无法为每种类型创建单独的函数,也无法使用switch语句。
P.S:在我的用例中,我想使common
无效,因为它保存每个结构的创建时间,并且我想跟踪该结构的历史,因此我将知道它是否更改。在结构中包含创建时间会造成混乱,因为每次生成新结构时创建时间都会不同,即使其实际数据可能相同。
答案 0 :(得分:2)
用公共字段定义一个结构,并使其实现一个表示可以使公共字段无效的接口。然后将此结构嵌入到其他应该可以使字段无效的结构类型中。
if ($_GET['order'] == 'author') $order = 'author';
if ($_GET['title'] == 'title') $order = 'title';
etc.
(在Go Playground上查看)
您也可以使用reflection,但使用界面通常更具可读性。