Как написать функцию для обработки двух типов входных данных в Голанге - PullRequest
0 голосов
/ 13 июня 2019

У меня есть несколько struct с несколькими полями. Например,

type A struct {
    Color string
    Mass  float
    // ... other properties
}
type B struct {
    Color string
    Mass  float
    // ... other properties
}

У меня также есть функция, которая работает только с общими полями, скажем,

func f(x){
    x.Color
    x.Mass
}

Как бороться с такими ситуациями? Я знаю, что мы можем превратить цвет и массу в функции, затем мы можем использовать интерфейс и передать этот интерфейс функции f. Но что, если типы A и B не могут быть изменены. Нужно ли определять две функции с практически одинаковой реализацией?

1 Ответ

0 голосов
/ 14 июня 2019

В Go у вас нет традиционного полиморфизма, как в Java, c # и т. Д. Большинство всего делается с использованием композиции и встраивания типов. Один из способов сделать это - изменить свой дизайн и сгруппировать общее поле в отдельную структуру. Это просто другое мышление.

type Common struct {
    Color string
    Mass  float32
}
type A struct {
    Common
    // ... other properties
}
type B struct {
    Common
    // ... other properties
}

func f(x Common){
    print(x.Color)
    print(x.Mass)
}

//example calls
func main() {
    f(Common{})
    f(A{}.Common)
    f(B{}.Common)
}

Существуют и другие способы использования упомянутых интерфейсов и геттеров здесь , но IMO, это самый простой способ

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