这是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。