Как в Golang передавать в функцию массивы структур разных типов? У меня есть несколько массивов структур разного типа. Мне необходимо передать по очереди эти массивы в функцию. Но типы у структур разные. Код что-то типа такого:func Function(MyStruct /*Что здесь написать?*/){ for _ , field := range MyStruct { ... } } func main() { ... Function(city, country, []MyStruct1) Function(city, country, []MyStruct2) ... } Это вообще возможно реализовать?
Да, это возможно реализовать в Golang с помощью интерфейсов. Чтобы передавать массивы структур разных типов в функцию, вы можете объявить интерфейс и реализовать его для каждой структуры. Затем в функции вы можете использовать этот интерфейс как тип параметра.
Пример:
package main import ( "fmt" ) // Объявляем интерфейс type MyStruct interface { GetName() string } // Структуры type City struct { Name string } func (c City) GetName() string { return c.Name } type Country struct { Name string } func (c Country) GetName() string { return c.Name } // Функция принимает массив структур через интерфейс func Function(data ...MyStruct) { for _, field := range data { fmt.Println(field.GetName()) } } func main() { // Создаем массивы структур разных типов city := []MyStruct{City{Name: "New York"}, City{Name: "Moscow"}} country := []MyStruct{Country{Name: "USA"}, Country{Name: "Russia"}} // Передаем их в функцию Function(city...) Function(country...) }
В данном примере у нас есть интерфейс MyStruct, который имеет метод GetName(). Затем мы объявляем структуры City и Country, которые реализуют этот интерфейс. В функции Function мы можем принимать массив структур через интерфейс и вызывать метод GetName() для каждой структуры.
Таким образом, вы можете передавать массивы структур разных типов в функцию и обрабатывать их в зависимости от реализации интерфейса.
Да, это возможно реализовать в Golang с помощью интерфейсов. Чтобы передавать массивы структур разных типов в функцию, вы можете объявить интерфейс и реализовать его для каждой структуры. Затем в функции вы можете использовать этот интерфейс как тип параметра.
Пример:
package mainimport (
"fmt"
)
// Объявляем интерфейс
type MyStruct interface {
GetName() string
}
// Структуры
type City struct {
Name string
}
func (c City) GetName() string {
return c.Name
}
type Country struct {
Name string
}
func (c Country) GetName() string {
return c.Name
}
// Функция принимает массив структур через интерфейс
func Function(data ...MyStruct) {
for _, field := range data {
fmt.Println(field.GetName())
}
}
func main() {
// Создаем массивы структур разных типов
city := []MyStruct{City{Name: "New York"}, City{Name: "Moscow"}}
country := []MyStruct{Country{Name: "USA"}, Country{Name: "Russia"}}
// Передаем их в функцию
Function(city...)
Function(country...)
}
В данном примере у нас есть интерфейс MyStruct, который имеет метод GetName(). Затем мы объявляем структуры City и Country, которые реализуют этот интерфейс. В функции Function мы можем принимать массив структур через интерфейс и вызывать метод GetName() для каждой структуры.
Таким образом, вы можете передавать массивы структур разных типов в функцию и обрабатывать их в зависимости от реализации интерфейса.