• Golang中接口的使用场景——通过裁员的故事来说明


    [本文出自天外归云的博客园]

    本故事纯属虚构,如有雷同纯属巧合。

    本故事纯属虚构,如有雷同纯属巧合。

    本故事纯属虚构,如有雷同纯属巧合。

    什么是接口?那个主谓结构的句子来举例:公司要裁员——这里公司就是接口,裁员就是接口中的方法。

    解释:公司是不确定的,裁哪些人也是不确定的。所以把公司作为一个接口,裁员作为接口中的方法。任何结构体继承了这个公司接口,都要实现裁员方法。

    Golang里定义接口类型的关键字是interface,看看代码就全明白了:

    package main
    
    import "fmt"
    
    // Company 公司接口
    type Company interface {
        CaiYuan()            // 裁员方法
        JuJiaBanGong(string) // 居家办公方法
    }
    
    // Netease 网易公司
    type Netease struct {
        name string
    }
    
    // CaiYuan 裁员方法
    func (c *Netease) CaiYuan() {
        fmt.Printf("[%s]裁员:把不赚钱的业务裁掉\n", c.name)
    }
    
    // JuJiaBanGong 居家办公方法
    func (c *Netease) JuJiaBanGong(region string) {
        if region == "中国" {
            fmt.Printf("[%s]居家办公:工作+按时捅嗓子眼儿\n", c.name)
        }
    }
    
    // Tencent 腾讯公司
    type Tencent struct {
        name string
    }
    
    // CaiYuan 裁员方法
    func (c *Tencent) CaiYuan() {
        fmt.Printf("[%s]裁员:优先把北京的组裁掉\n", c.name)
    }
    
    // JuJiaBanGong 居家办公方法
    func (c *Tencent) JuJiaBanGong(region string) {
        if region == "中国" {
            fmt.Printf("[%s]居家办公:工作+按时捅嗓子眼儿\n", c.name)
        }
    }
    
    // GFuck 搞公司的方法,这里因为XX具体要搞哪个公司不一定,所以传入的参数是接口类型,这里要注意!实际传入的结构体必须实现这个接口类型的全部方法
    func GFuck(c Company) {
        // 先让公司居家办公
        c.JuJiaBanGong("中国")
        // 再让公司裁员
        c.CaiYuan()
    }
    
    func main() {
        // 这里传入的结构体对象都需要实现Company接口中定义的所有方法——否则会报错
        var companies = []Company{&Tencent{name: "腾讯"}, &Netease{name: "网易"}}
        for _, c := range companies {
            GFuck(c)
        }
    }

    运行结果如下:

    你学废了吗?

  • 相关阅读:
    h.264宏块与子宏块类型
    h.264语法结构分析
    [傅里叶变换及其应用学习笔记] 关于任何信号都能表现成傅里叶级数形式的推导
    [傅里叶变换及其应用学习笔记] 课程概览
    [傅里叶变换及其应用学习笔记] 三十. 拉东变换
    [傅里叶变换及其应用学习笔记] 二十九. 高维Ш函数修改版
    后端解决 微信H5支付 商户参数格式错误 方法
    PhpStorm一次性折叠所有函数或者方法
    js生成的cookie在yii2中获取不到的解决办法
    Android webview 调起H5微信支付
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/16359810.html
Copyright © 2020-2023  润新知