interface
duck type
package main
import (
"fmt"
)
type XLS struct {
}
//xls receiver
func (xls *XLS) read() {
fmt.Println("reading xls file")
}
type XLSX struct {
}
//xlsx receiver这样定义func的好处是可以像这样屌用function xlsx.read
func (xlsx *XLSX) read() {
fmt.Println("reading xlsx file")
}
type Reading interface {
read()
}
func main() {
var r Reading = &XLS{}
r.read() //reading xls file
}
在实际开发中: 我们可以把共用的方法提取出来,放到自己定义的inerface中
golang中只要实现了接口的所有方法,就属于这个类
比如struct A 如果实现了read()方法(注意必须用struct去实现,即调用者必须是是struct而不是包名),那么就能用java中多态的方式来声明对象:
//父 := 子
var r Reading = &XLS{}