golang-接口

2018-04-06  本文已影响39人  6a91e15c5cde

duck typing

接口定义与实现

package main

import "fmt"

//定义了一个接口Retriver
type Retriver interface {
    Get(url string) string
}


//使用者download
func download(r Retriver) string {
    return r.Get("www.baidu.com")
}


//使用者去实现Get方法
type MockRetriever struct {
    Contents string
}
//实现了接口Retriver的get方法,也就是实现了Retriver接口
func (r MockRetriever) Get(url string) string {
    return r.Contents
}


func main(){
    var r Retriver
    r = MockRetriever{Contents:"this is a interface test!"}
    fmt.Print(download(r))
}

打印对象类型

package main

import (
    "hans/learn/other/retriever/real"
    "fmt"
    "hans/learn/other/retriever/mock"
)



//定义了一个接口Retriver
type Retriver interface {
    Get(url string) string
}


//使用者download
func download(r Retriver) string {
    return r.Get("http://www.baidu.com")
}



func main(){
    var r Retriver
    r = real.Retriver{}
    inspect(r)
    //断言测试
    if mockRetriever ,ok := r.(mock.Retriever);ok{
        fmt.Println(mockRetriever.Contents)
    }else{
        fmt.Println("not a mock retriever")
    }
}


func inspect (r Retriver){
    fmt.Printf("%T %v\n",r,r)
    switch v :=r.(type) {
    case mock.Retriever:
        fmt.Println("Contents:",v.Contents)
    case *real.Retriver:
        fmt.Println("Contents:",v.UserAgent)
    }

}

接口的组合

上一篇 下一篇

猜你喜欢

热点阅读