go - 将结构组合传递给函数
问题描述
需要一些帮助来理解 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
}
解决方案
该processWolf
函数需要一个Wolf
参数,因此您必须传递一个Wolf
. 由于两种结构都Wolf
嵌入其中,您可以执行以下操作:
processWolf(porthos.Wolf)
processWolf(aussie.Wolf)
因为当你嵌入Wolf
的时候Dog
,Dog
得到了所有的方法Wolf
,再加Dog
上一个叫Wolf
.
推荐阅读
- python - “无法使用 `eval()` 评估张量:未注册默认会话”同时使用带有 Estimator API 的自定义 SessionRunHook
- c# - WPF 从动态集 ListViewItem 中获取 MouseHover 事件
- c# - 过滤没有linq c#的对象列表
- javascript - 如何在向下滚动时平滑地降低 div 的高度并在向上滚动时以相同的速率增加它?
- c# - 显示空列的数据表上的 LINQ 查询
- python-3.x - 将数据框中的元素转换为字符串
- ajax - 基于选定下拉列表的 django 和 ajax 下拉列表
- android - 如何从详细屏幕同时更新嵌套回收视图行的 UI?
- r - 如果从现有数据框创建新数据框时值不存在,则插入 NA
- spring-boot - Spring Boot - 创建泛型存储库