最近在看Ethereum源码,发现在它的BlockChain结构体里面有属性直接是接口,它有个set函数,用于设置接口的,传的值为实现这个接口的一个结构体。下面自己试着写了一个小demo:
package main
import (
"fmt"
)
type A interface {
NameGet() string
}
type B struct {
i int
a A
}
func NewB(a A) *B {
nb := &B{i: 2}
nb.SetA(a)
return nb
}
func (b *B) SetA(a A) {
b.a = a
}
type C struct {
name string
}
func NewC() *C {
c := &C{"chen"}
return c
}
func (c *C) NameGet() string {
return c.name
}
func main() {
b := NewB(NewC())
fmt.Println(b.a.NameGet())
}
A是一个接口,B是一个结构体,有个A接口属性,它有个方法用于设置A接口&