0
点赞
收藏
分享

微信扫一扫

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

花姐的职场人生 2022-09-18 阅读 188


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

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

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

 

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

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

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)
}
}

运行结果如下:

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

你学废了吗?

 



举报

相关推荐

0 条评论