Как передать разные типы как struct {} для работы в GoLang? - PullRequest
0 голосов
/ 23 мая 2019

Я хочу написать функцию, которая принимает разные struct-типы как 1 параметр. Кроме того, я должен убедиться, что в этих структурах есть Id поле. поэтому я хочу иметь такую ​​функцию: MyFunction(object *struct{ Id int }

Я пытался передать структуру *struct{ Id int } и параметру interface{}.

Например, у меня есть 2 типа структуры:

type TableOne struct {
    Id   int
    name string
    date string
}

type TableTwo struct {
    Id      int
    address string
    athome  bool
}

Чтобы сохранить их в базе данных (используя reflection), у меня есть следующая функция:

func SaveMyTables(tablename string, obj *struct{ Id int }) {
    // ... Some code here

    if obj.Id != 0 {
        // ... Some code here
    }

    // ... Some code here
}

Я назову функцию так:

obj := &TableTwo{
    Id: 5
    address: "some address"
    athome: false
}

myPackage.Save("addresses", obj).

Но я получаю эту ошибку:

cannot use obj (type *mytables.TableTwo) as type *struct { Id int } in argument to myPackage.Save

1 Ответ

1 голос
/ 26 мая 2019

Я хочу написать функцию, которая принимает различные типы структуры в качестве 1 параметра.Кроме того, я должен убедиться, что в этих структурах есть поле Id.

Начиная с текущей версии Go, вы не можете сделать это.Единственный способ, которым Go поддерживает передачу нескольких типов аргументов в один параметр, - это использование интерфейсов, и интерфейсы могут указывать только наборы методов, а не поля.

(Go 2 планирует добавить универсальные шаблоны, и это может быть возможнозатем. Однако нет конкретных сроков, когда это будет доступно.)

...