henryspace

记录精彩的程序人生 开始使用

Part 15 - Go 语言学习 - 接口的定义

接口的定义

1,使用者--->实现者,duck typing只关注外部功能,而不关注内部实现

  • 接口由使用者定义
package main

import (
	"fmt"
	"ging/retriever/real"
)

// 使用者定义接口
type Retriever interface{
	Get(url string) string
}

func download(r Retriever) string{
	return r.Get("https://www.imooc.com")
}

func main() {
	var r Retriever
	r = real.Retriever{}
	fmt.Println(download(r))
}
  • 实现者实现功能
package real

import (
	"net/http"
	"net/http/httputil"
)
// 实现者
type Retriever struct {
	//UserAgent string
	//TimeOut time.Duration
}

func (r Retriever) 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)
}

评论
留下你的脚步