В Go интерфейсы реализованы неявно.
Вы можете определить интерфейс с получателями, необходимыми для извлечения значений, которые вы хотите сравнить.
type Azcore interface {
SomeValue() int // This is a getter
SomeOtherValue() string // This is a getter
}
Затем вы можете объявить эти методы типа Client
type Client struct {
Value int
OtherValue string
ExtraValue float64
}
func (c *Client) SomeValue() int {
return c.Value
}
func (c *Client) SomeOtherValue() string {
return c.OtherValue
}
и, наконец, объявляют "те же" методы для типа Auth
type Auth struct {
Value int
SpecialValue string
}
func (a *Auth) SomeValue() int {
return a.Value
}
func (a *Auth) SomeOtherValue() string {
return a.SpecialValue
}
Затем можно использовать тип Azcore
в функциях, как параметр или как результат конвертации
func areEquals(a, b Azcore) bool {
return a.SomeValue() == b.SomeValue() && a.SomeOtherValue() == b.SomeOtherValue()
}
func (a *Auth) AsAzcore() Azcore {
return a
}
func (c *Client) AsAzcore() Azcore {
return c
}
Регистрация детская площадка