


main.go
package main
import (
"fmt"
"retriever/mock"
"retriever/real"
)
type Retriever interface {
Get(url string) string
}
func download(r Retriever) string {
return r.Get("http://www.imooc.com")
}
func main() {
var r Retriever
r = &mock.Retriever{Contents:"this is a fake imooc.com"}
r = &real.RealRetriever{}
fmt.Println(download(r))
}
mock/mockretriever.go
package mock
type Retriever struct {
Contents string
}
func (r *Retriever)Get(url string) string {
return r.Contents
}
real/retriever.go
package real
import (
"time"
"net/http"
"net/http/httputil"
)
type RealRetriever struct {
UserAgent string
TimeOut time.Duration
}
func (r *RealRetriever) Get(url string) string {
resp, err := http.Get(url)
if err != nil {
panic(err)
}
result, err := httputil.DumpResponse(
resp, true)
resp.Body.Close()
if err != nil {
panic(err)
}
return string(result)
}
1087

被折叠的 条评论
为什么被折叠?



