golang struct组合,转型问题请教
type Action interface {
OnHurt2(other Action)
GetDamage() int
}
type Base struct {
atk, hp int
}
func (this *Base) OnHurt(other *Base) {
this.hp -= other.atk
}
func (this *Base) OnHurt2(other Action) {
this.hp -= other.GetDamage()
}
func (this *Base) GetDamage() int {
return 100
}
type Child struct {
Base
}
c1 := &Child{Base{atk: 20, hp: 100}}
c2 := &Child{Base{atk: 40, hp: 60}}
//这里报错cannot use type *Child to type *Base
c1.OnHurt(c1)
//要显示指定Base,有没有办法不显示指定
c1.OnHurt(&c2.Base)
//用一个接口来转型,但是这样的话一个接口会很臃肿。
//有没有好办法,帮忙改造下
c1.OnHurt2(c2)
入群交流(和以上内容无关):Go中文网 QQ 交流群:729884609 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网
是你自己在OnHurt里制定需要传入 Base啊……
能想到的做法有两个,一个是把base里的方法提取为一个interface
另一个版本就是做 base的Getter,比如 GetBase()*Base
然后加到action这个interface里面去。
golang struct组合,转型问题请教的更多相关文章
- Golang Struct 声明和使用
Golang Struct 声明和使用 Go可以声明自定义的数据类型,组合一个或多个类型,可以包含内置类型和用户自定义的类型,可以像内置类型一样使用struct类型 Struct 声明 具体的语法 t ...
- golang struct扩展函数参数命名警告
今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...
- golang struct
ex1 /* https://golangbot.com/structs/ struct 结构 结构就是一组字段. */ package main import "fmt" // ...
- golang struct tag
golang可以在struct中的每个字段,写上一个tag.这个tag可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化 package main import ( "enc ...
- [Golang] struct Tag说明
在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有小米点括起来的内容.形如 type User struct { UserId int `json:"use ...
- golang struct 转map 及 map[string]*Struct 初始化和遍历
package main import ( "encoding/json" "errors" "fmt" "reflect&quo ...
- 【GoLang】GoLang struct 使用
代码示例: package main import "fmt" type Human struct { name string age int weight int } type ...
- Golang struct结构
结构struct Go中的struct与C中的struct非常相似,并且Go没有class,代替了class的位置,但并没有代替class的功能 使用type struct{} 定义结构,名称遵循可见 ...
- golang struct 和 byte互转
相比于encoding, 使用unsafe性能更高 type MyStruct struct { A int B int } var sizeOfMyStruct = int(unsafe.Sizeo ...
随机推荐
- python_面向对象——对象之间的关联关系
1.将类中的对象关联起来(简单的方法) class Person: def __init__(self,name,age,sex): self.name = name self.age = age s ...
- vulkan的subpass
最近在写 unity上 vulkan开subpass 似乎pc上subpass 的input attachement hlslcc_fbinput_0绑不上的 在手机上能绑上 说明subpass这个功 ...
- vue2 父子组件数据更改
父级以对象的形式传递数据给子级,子级更改此数据时,父级同步更改
- asp.net用sql数据库生成json字符串并显示出来
use Shop ,) )) insert into DictBase select '包装' UNION ALL select '价格' UNION ALL select '品牌' 工厂方法模式 I ...
- Educational Codeforces Round 74 (Rated for Div. 2)【A,B,C【贪心】,D【正难则反的思想】】
A. Prime Subtractiontime limit per test2 secondsmemory limit per test256 megabytesinputstandard inpu ...
- xShell终端中文乱码-解决方法
中文乱码的原因有三种:(1)Linux系统的编码问题(2)xShell终端的编码问题(3)两端的语言编码不一致 linux系统编码 (1) locale:查看系统语言 (2)echo $LANG:查看 ...
- 数据结构---Set和Map
1.Set数据结构 Set本质上是一个没有重复数据,但是具有irerator接口可以遍历的一种集合. Set本身也是一种数据结构的构造函数. 1.Set的初始化 var obj = new Set(参 ...
- Shell 05 Sed
一.基本用方法 1.sed文本处理工具的用法 用法1:前置命令 | sed [选项] '条件指令' 用法2:sed [选项] '条件指令' 文件.. .. 注意:没有条件时候,默认所有条件, ...
- PC端使用program來CHGUSRPRF
執行CHGUSRPRF命令需要*SECADM 權限,但通常Security部門不允許Grant這個這麼大的權限,爲了達到目的,改用下面的方法 1. Create CL program 注意裏面一定要用 ...
- sz/rz
需要客户端的支持,CRT或者Xshell等 linux端默认是不支持的, 不用通过传输工具来传输文件 yum -y install lrzsz