go - 这是 Go 中组合的有效实现吗?

标签 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",
    }, ""))
}

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")
}

关于go - 这是 Go 中组合的有效实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265777/

相关文章:

string - 如何使用 Go 将格式化字符串打印到标准输出中的同一行?

c++ - 通过组合访问父类

python - 使用 python 的多处理模块分配作业

json - 如何合并相关数据

docker - 无法使用dockerfile golang打开文件

user-interface - 将提示锁定在屏幕底部

java - 子接口(interface)如何重用其父接口(interface)的实现?

python - 如何从另一个对象的方法访问对象的属性,这是 Python 中的属性之一?

javascript - compose 函数如何处理多个参数?

json.Unmarshal json string to object is empty 结果