Могу ли я разрешить произвольные поля в общей структуре? - PullRequest
0 голосов
/ 24 февраля 2020

Я хотел бы определить объект в общей библиотеке,

type Common struct {
   field_a string
   custom  interface{}
}

, где custom, как ожидается, будет содержать дополнительные поля, которые пользователь этого общего объекта может определить в своем файле, например,

// module-1
type Mod1Customs struct {
   abc string
}

Здесь я хотел бы иметь возможность установить Common.custom на Mod1Customs, чтобы я мог получить доступ к field_a и abc таким же образом из модуля-1. Я хотел бы сделать то же самое для других модулей, которые могут определять совершенно другую структуру для присваивания custom.

Общая идея состоит в том, чтобы создать объект с предварительно определенными значениями по умолчанию и разрешить набор пользователи объекта могут добавлять свои собственные поля.

Возможно ли это?

1 Ответ

2 голосов
/ 24 февраля 2020

То, что вам нужно, это встраивание:

type Common struct {
    FieldA string
}

type Mod1Customs struct {
    Common
    Abc string
}

Затем Mod1Customs получает доступ ко всем общим полям напрямую:

c := Mod1Customs{}
fmt.Println(c.FieldA)
fmt.Println(c.Abc)

См. Встраивание в действующем Go для более подробной информации.

Если у вас есть некоторые функции, которые работают с общими полями (независимо от структуры), вы бы реализовали это с помощью interface, который объявляет необходимые вам поля. Mod1Customs будет автоматически соответствовать этому интерфейсу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...