接口

go 采用duck typing 模式
实现一个接口是隐式的,只用实现接口对应的方法即可,所以只用使用者定义需要实现的方法即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

type Downloader interface {
Get(url string) string
}

type SimpleDownload struct {
}

func (dl SimpleDownload) (url string) string {
return "this is get " + url
}

type RealDownload struct {
}

func (dl RealDownload) (url string) string {
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
ret, err := httputil.DumpResponse(resp, true)
if err != nil {
panic(err)
}
return string(ret)

}

var dl Downloader
dl = interfaces.SimpleDownload{}
dl = interfaces.RealDownload{}
fmt.Println(dl.Get("http://svz7.cn"))