GO接口设计
Go的接口设计和很多主流的语言有很大的差别
避免的循环依赖的问题
方法签名一直即可
GO接口的实现 不依赖于Go接口的定义
接口为非入侵性,实现不依赖于接口定义
接口的定义可以包含在接口的使用者包内
Go 语言的DuckType式接口实现
package interface_test
import "testing"
type Programmer interface {
WriteHelloWorld( ) string
}
type GoProgrammer struct {
}
func (g *GoProgrammer) WriteHelloWorld( ) string{
return "fmt.Println(\"Hello World\")"
}
func TestClient(t *testing.T) {
var p Programmer
p = new(GoProgrammer)
t.Log(p.WriteHelloWorld())
}
接口变量
var prog Coder = &GoProgrammer{}
自定义类型
type IntConv func(op int) int
func TimeSpent (inner IntConv) IntConv{
return func(n int) int {
start := time.Now()
ret := inner(n)
fmt.Println("Time Spent:",time.Since(start).Seconds())
return ret
}
}