这是Go中组合的有效实现吗?
这篇作文有效吗?还是有其他解决方案这是Go中组合的有效实现吗?,go,composition,Go,Composition,这篇作文有效吗?还是有其他解决方案 package main import ( "fmt" "strings" ) type Person struct{ name string } type Swimmer struct{} func (s *Swimmer) Swim(name string) { fmt.Println(strings.Join([]string{ name, " is swimming", }, ""
package main
import (
"fmt"
"strings"
)
type Person struct{ name string }
type Swimmer struct{}
func (s *Swimmer) Swim(name string) {
fmt.Println(strings.Join([]string{
name,
" is swimming",
}, ""))
}
type IronMan struct {
person Person
swimmer Swimmer
}
func (i *IronMan) Swim() {
i.swimmer.Swim(i.person.name)
}
func main() {
ironMan := IronMan{
person: Person{"Mariottide"},
swimmer: Swimmer{},
}
ironMan.Swim()
}
Go具有
struct
嵌入:
package main
import (
"fmt"
)
type Person struct{ name string }
func (p *Person) Talk(message string) {
fmt.Printf("%s says: %s\n", p.name, message)
}
type Swimmer struct {
Person
}
func (s *Swimmer) Swim() {
fmt.Printf("%s is swimming\n", s.name)
}
type IronMan struct {
Swimmer
}
func main() {
ironMan := IronMan{Swimmer{Person{"Mariottide"}}}
ironMan.Swim()
ironMan.Talk("Hey")
}
铁人也是跑步者和自行车手。有了你的解决方案,你必须通过三次面试吗?铁人{游泳{人{“马里奥蒂德”},跑步{人{“马里奥蒂德”},…}是的。你可以为此创建工厂。这就是golang composition的工作原理。检查这篇文章,仅仅因为某些东西在语法上有效并不意味着它是惯用的。请不要尝试像在传统OOP中那样对代码建模。我正在寻找惯用的解决方案。我只知道传统OOP。