Исходный код выглядит так, как будто он придерживается подхода JavaScript, где функция будет мутировать объект.Go - это немного другое, где чаще всего происходит самовоспроизведение.
Например:
type Generic struct {
field string
}
func (generic *Generic) Value () string {
return generic.field
}
someObject := &Generic{
field: "some value",
}
log.Print(someObject.Value()) // Outputs "some value"
Если вы пришли из мира JavaScript, подумайте немного о структурахкак объект / класс, который может содержать атрибуты и функции.Структуры являются просто определением, пока экземпляр не будет создан.Это отличается от JavaScript, где определение объекта и данных определяются одновременно.
Как указывает другой ответ, интерфейс является еще одним аналогичным подходом к решению этой проблемы.
Разъяснение
В терминах JavaScript OP пытается сделать что-то похожее на:
class Foo {...}
class Bar {...}
class Baz {...}
extractField(Foo, Bar, Baz)
В языке JS это передало бы определение класса вметод extractField.Вам все равно придется создавать экземпляр класса, если вы хотите манипулировать им или читать из него, например:
extractField(new Foo(), new Bar(), new Baz())
Это в основном то, что достигается с помощью
extractField([]interface{}{Foo{},Bar{},Baz{}})
Iдумаю, что проблема, с которой вы сталкиваетесь, заключается в том, что создаются структуры Foo / Bar / Baz, а вложенная структура F - нет.