2.4 GO Interface

 

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

 

posted @ 2019-03-16 21:42  方诚  阅读(103)  评论(0编辑  收藏  举报