Golang использует композицию.
- Композиция объекта: Композиция объекта используется вместо наследования (которое используется в большинстве традиционных языков).Композиция объекта означает, что объект содержит объект другого объекта (скажем, Объект X) и делегирует ему обязанности объекта X.Здесь, вместо переопределения функций (как в наследовании), вызовы функций, делегированные внутренним объектам.
- Состав интерфейса: В составе интерфейса и интерфейсе можно создавать другой интерфейс, и весь набор методов, объявленных во внутреннем интерфейсе, становится его частью.interface.
Теперь, чтобы конкретно ответить на ваш вопрос, вы говорите о композиции интерфейса здесь.Вы также можете увидеть фрагмент кода здесь: https://play.golang.org/p/fn_mXP6XxmS
Проверьте ниже код:
player2.go
package game
type confPlayer2 interface {
Set(string, int) bool
Move(string) bool
}
func Play(conf confPlayer2) string {
// code for Player2, not the same as Player1.
}
player1.go
package game
type confPlayer1 interface {
confPlayer2
Initialize() bool
}
func Play(conf confPlayer1) string {
// code for Player1
}
В приведенном выше фрагменте кода интерфейс confPlayer1 содержит интерфейс confPlayer2, за исключением функции Initialize, которая является только частью confPlayer1.
Теперь вы можете использовать интерфейс confPlayer2 для проигрывателя2 и confPlayer1 для игрока1.см. фрагмент кода ниже:
player.go
package game
type Player struct{
Name string
...........
...........
}
func (p Player) Set(){
.......
.......
}
func (p Player) Move(){
........
........
}
func Play(confPlayer2 player){
player.Move()
player.Set()
}