zoukankan      html  css  js  c++  java
  • go_组合接口

    main函数入口

    package main
    
    import (
    	"fmt"
    	"learngo/retriever/mock"
    	"learngo/retriever/real"
    	"time"
    )
    
    func main(){
    	var r Retriever
    	retriever := mock.Retriever{"this is fyf"}
    	inspect(r)
    	r = &real.Retriever{
    		UserAgent:"Mozilla/5.0",
    		TimeOut:time.Minute,
    	}
    	inspect(r)
    
    	//Type assertion
    	reaRetriever:=r.(*real.Retriever)
    	fmt.Println(reaRetriever.TimeOut)
    	//fmt.Println(download(r))
    	fmt.Println(session(&retriever))
    }
    //interface中的函数不用加func
    type Retriever interface {
    	Get(url string) string
    }
    
    type Poster interface {
    	Post(url string ,form map[string]string) string
    }
    
    const url  = "http://www.imooc.com"
    func post(p Poster){
    	p.Post(url,map[string]string{
    		"name":"fyf",
    		"cource":"golang",
    	})
    }
    
    //组合interface,RetrieverPoster内部装了两个interface
    type RetrieverPoster interface {
    	Retriever
    	Poster
    }
    
    func session (r RetrieverPoster) string{
    	r.Post(url,map[string]string{
    		"contents":"this is another",
    	})
    	return r.Get(url)
    }
    
    func download(r Retriever) string{
    	return  r.Get(url)
    }
    
    func inspect(r 	Retriever){
    	fmt.Printf("%T %v
    ",r,r)
    	switch v:=r.(type) {
    	case *mock.Retriever:
    		fmt.Println("Contents",v.Contents)
    	case *real.Retriever:
    		fmt.Println("UserAgent",v.UserAgent)
    	}
    }
    

      实现了两个接口

    package mock
    
    import "fmt"
    
    type Retriever struct {
    	Contents string
    }
    
    func (r *Retriever) String() string {
    	return fmt.Sprintf("Retriever:{Contents=%s}",r.Contents)
    }
    //接口1
    func (r *Retriever) Post(url string, form map[string]string) string {
    	r.Contents = form["contents"]
    	return "ok"
    }
    
    //go语言中实现了Get(url string),就被认为实现了Retriever接口
    //接口2 func (r *Retriever) Get(url string) string { return r.Contents }

      

  • 相关阅读:
    设计原则
    最小路径和--p64--动态规划
    ssm实现数据库关键信息的动态加载
    最大二叉树--p654--递归构造
    城市天际线--p807
    长url转短url--p535
    从中序与后序遍历中构造二叉树-p106--数组,二叉树遍历
    n皇后问题--p52--回溯
    Markdown(editormd)语法解析成HTML
    NFA的实现
  • 原文地址:https://www.cnblogs.com/luffe/p/8554124.html
Copyright © 2011-2022 走看看