6.3 接口的定义和实现

一、接口的定义

  1. 接口由使用者定义

  2. 接口的实现是隐式的

  3. 是要实现接口里的方法即可

  4. 代码实现:

    // 定义接口以及使用
    package main
    
    // 接口
    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 = mock.Retriever{"this is "}
    	r = real.Retriever{}
    	fmt.Println(download(r))
    }
    
    
    // 实现方法:
    // 第一个
    type Retriever struct {
    	Contents string
    }
    
    func (r Retriever) Get(url string) string {
    	return r.Contents
    }
    
    // 第二个
    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)
    }

Last updated

Was this helpful?