@Twindo

Есть ли альтернатива переопределению методов в Go?

Есть следующий код:

package main

import (
	"fmt"
)

//
// Inteface
//

type X interface {
	Print()
}

//
// Impl A
//

type A struct {
}

func (a *A) Print() {
	fmt.Println(a.Get())
}

func (a *A) Get() string {
	return "A"
}

//
// Impl B
//

type B struct {
	*A
}

func (b *B) Get() string {
	return "B"
}

//
// Main
//

func main() {
	x := &B{A: &A{}}
	x.Print() 
}


Какие есть способы, для того чтобы x.Print() Вывел на экран "B"?
  • Вопрос задан
  • 525 просмотров
Решения вопроса 1
В go предполагается вот такой стиль:
https://play.golang.org/p/uFA4rWeHn4
package main

import (
	"fmt"
)

//
// Inteface
//

type Gettable interface {
	Get() string
}

//
// Impl A
//

type A struct {
}

func (a *A) Get() string {
	return "A"
}

//
// Impl B
//

type B struct {
}

func (b *B) Get() string {
	return "B"
}

//
// Main
//

func main() {
	a := A{}
	b := B{}
	PrintSomeStuff(&a)
	PrintSomeStuff(&b)
}

func PrintSomeStuff(obj Gettable) {
	fmt.Println(obj.Get())
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы