package itface type Sender interface { Send(url string) string } type Geter interface { Get(url string ) string } //组合接口 type Socket interface { Sender Geter }
具体的实现struct中不必指定接口的名称,但却有一个要求:一个struct如果实现了某个接口,那么就必须实现接口中的所有方法
package itface import "fmt" type Client struct { Count int Contents string } func (cc Client) Send(url string) string { fmt.Println("send message") return "ok" } func (cc Client) Get(url string ) string { fmt.Println(cc.Contents) return cc.Contents }
package itface import "fmt" type Server struct { Count int Contents string } //值复制方式,每次都是从初始化的值开始计算,没有高并发的问题 func (ss Server) Send(url string) string{ //ss.Count += 1 ss.setCount(1) fmt.Println(ss.Count) fmt.Println(ss.Contents) return ss.Contents } func (ss *Server) setCount(a int){ ss.Count += a }
package main import ( "fmt" "study/itface" ) func test(str string){ var send itface.Sender send = itface.Server{1,str} var url string url = "www.baidu.com" send.Send(url) fmt.Println("第2次调用") send.Send(url) } func client(str string){ var client itface.Geter client = itface.Client{1,str} client.Get("www.itoracle.cn") } func socket(str string) { var sk itface.Socket sk = itface.Client{1,str} sk.Send("www.itoracle.cn") } func main() { test("不可能") client("why?") socket("bbb") }
输出结果
2 不可能 第2次调用 2 不可能 why? send message