6.5 接口的组合
一、接口的组合
使用者一次性使用多个接口
具有更加丰富的灵活性
// main中定义接口 type Poster interface { Post(url string, form map[string]string) string } // main中定义组合接口 type RetrieverPoster interface { Retriever Poster } // main中实现组合接口 // 接口组合 func session(res RetrieverPoster) string { res.Post(url, map[string]string{ "contents": "postTest", }) return res.Get(url) } // main中调用方式 fmt.Println(session(&retriever))备注:问题是,因为传参类型问题,造成组合接口中的数据无法传递,这就需要使用指针方式进行标记
// 实现方式 // 实现文件全部使用指针方式传参 func (r *Retriever) Post(url string, form map[string]string) string { r.Contents = form["contents"] return "ok" } func (r *Retriever) Get(url string) string { return r.Contents } // main文件中使用指针传递 retriever := mock.Retriever{"this is "} r = &retriever // 注意:main中的遍历引用全部需要修改 func inspect(r Retriever) { fmt.Printf("%T %v \n", r, r) switch v := r.(type) { case *mock.Retriever: fmt.Println("Contents:", v.Contents) case *real.Retriever: fmt.Println("UserAgent:", v.UserAgent) } }
二、标准库中的接口组合方式
io.ReadWriterCloser()
Last updated
Was this helpful?