接口和将匿名字段嵌入到结构中

当附近发生爆炸时,我试图代表一个戴眼镜的人靠近窗户。main是在爆炸期间应该做什么的草图。应该收集爆炸附近物体的列表,并为每个物体做特定的事情(例如粉碎或熔化)。玻璃和窗户如预期般破碎,但出于某种原因,人类也破碎了。为什么?


package main

import "fmt"

type Human struct { Glasses }

type Glasses struct {}

type Shatterable interface { shatter() }

func (g Glasses) shatter() {}

type Window struct {}

func (w Window) shatter() {}


func main() {

    h := Human{Glasses{}}

    objectsInProximity := []interface{}{h,h.Glasses,Window{}}

    for _,o := range objectsInProximity {

        shatter(o)

    }

}


func shatter(i interface{}) {

    s, ok := i.(Shatterable)

    if ok {

        fmt.Printf("shattering a %T\n", s)

        s.shatter()

    }

}

$ go run a.go

shattering a main.Human

shattering a main.Glasses

shattering a main.Window


守着一只汪
浏览 174回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go