首页 > 解决方案 > 将结构组合传递给函数

问题描述

需要一些帮助来理解 golang。

来自使用基类的 C++,这是微不足道的。在 Go 中,使用结构组合,它可以正常工作,直到我需要具有采用“基础”结构的函数。我知道它不是真正的基类,但是当从派生中为基类的字段分配值时,它可以正常工作。但我不能传入Dog一个需要Wolf.

package main
    
import "fmt"
    
type Wolf struct {
    ID     string
    Schema int
}
    
type Dog struct {
    Wolf
}
    
type Dingo struct {
    Wolf
}
    
func processWolf(wolf Wolf) {
    fmt.Println(wolf.ID, wolf.Schema)
}
    
func main() {
    porthos := Dog{}
    porthos.ID = "Porthos"  // works fine able to set field of Wolf
    porthos.Schema = 1      // works fine
    
    aussie := Dingo{}
    aussie.ID = "Aussie"  // works fine
    aussie.Schema = 1     // works fine
    
    fmt.Println(porthos.ID, porthos.Schema)
    fmt.Println(aussie.ID, aussie.Schema)

    processWolf(porthos) << fails here
    processWolf(aussie) << fails here
    
}

标签: goinheritancecomposition

解决方案


processWolf函数需要一个Wolf参数,因此您必须传递一个Wolf. 由于两种结构都Wolf嵌入其中,您可以执行以下操作:

processWolf(porthos.Wolf) 
processWolf(aussie.Wolf) 

因为当你嵌入Wolf的时候DogDog得到了所有的方法Wolf,再加Dog上一个叫Wolf.


推荐阅读