2 回答
TA贡献1811条经验 获得超6个赞
您使用嵌入的变体实际上并未嵌入。嵌入字段是匿名的,然后Go会自动委托。
这将您的示例简化为:
type EvenCounter3 struct {
INumber
}
func (this *EvenCounter3) IncTwice() {
this.Inc() // using this.n.Inc() twice makes it slower
this.Inc()
}
请注意,String()是自动委派的(在Go语言中为“提升”)。
至于两次调用Inc()会使它变慢,那是使用接口的限制。接口的重点是不公开实现,因此您无法访问其内部数字变量。
TA贡献1810条经验 获得超5个赞
我不确定我是否正确理解您要达到的目标。也许是这样的?
package main
import "fmt"
type Num interface {
Inc()
String() string
}
type Int32 struct {
int32
}
func (n *Int32) Inc() {
(*n).int32++
}
func (n Int32) String() string {
return fmt.Sprintf("%d", n.int32)
}
type EventCounter interface {
Num
IncTwice()
}
type Event struct {
Num
}
func (e Event) IncTwice() {
e.Inc()
e.Inc()
}
func main() {
e := Event{&Int32{42}}
e.IncTwice()
fmt.Println(e)
}
(在这里)
输出
44
- 2 回答
- 0 关注
- 167 浏览
添加回答
举报