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{}

results matching ""

    No results matching ""