Код внедренной структуры в hereВ golang, Как я могу переопределить метод
package main
import "fmt"
func main() {
t16()
}
type Base struct {
val int
}
func (b *Base)Set(i int) {
b.val = i
}
type Sub struct {
Base
changed bool
}
func (b *Sub)Set(i int) {
b.val = i
b.changed = true
}
func t16() {
s := &Sub{}
s.Base.Set(1)
var b *Base = &s.Base
fmt.Printf("%+v\n", b)
fmt.Printf("%+v\n", s)
}
Я хочу сделать Sub выступать в качестве базы, но когда я звоню Set, для Sub это будет означать changed.I знаю, что есть нет полиморфизма или прокси в голанге, но есть ли способ сделать это, а не влиять на базу?
ОБНОВЛЕНО
Я надеюсь, что, когда я называю Base.Set это будет означать изменение, для пользователя, они не знают, что они на самом деле использовать Sub, так что я могу контролировать Базовый себя весть.
func t16() {
s := &Sub{}
var b *Base = &s.Base
b.Set(10)
fmt.Printf("%+v\n", b)
fmt.Printf("%+v\n", s)
}
Если это так, то вы правы, интерфейсы - это путь. Go не имеет наследования типа 'is-a'. – captncraig