如何在未知类型的结构中修改字段?

时间:2018-09-20 03:16:28

标签: go struct reflection interface

我有多个具有一个公共字段的结构;我们在这里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无效,因为它保存每个结构的创建时间,并且我想跟踪该结构的历史,因此我将知道它是否更改。在结构中包含创建时间会造成混乱,因为每次生成新结构时创建时间都会不同,即使其实际数据可能相同。

1 个答案:

答案 0 :(得分:2)

用公共字段定义一个结构,并使其实现一个表示可以使公共字段无效的接口。然后将此结构嵌入到其他应该可以使字段无效的结构类型中。

if ($_GET['order'] == 'author') $order = 'author';
if ($_GET['title'] == 'title') $order = 'title';
etc.

(在Go Playground上查看)

您也可以使用reflection,但使用界面通常更具可读性。