0
点赞
收藏
分享

微信扫一扫

golang 入门(六) 接口

在Python中,为了对一类事务进行抽象描述,引入了class类这个概念。即拥有相同属性和方法的事务都成为一个类。以我们常见的电脑(computer)为例。电脑是一个类的名称,所有的电脑都有相同的属性如电脑名称,也拥有相同的使用方法如开机、关机等。那么用Python语言描述的话,示例代码如下

class Computer:
def __init__(self, computer_type):
# 描述基础属性 电脑类型
self.computer_type = computer_type

def poweron(self):
print("{} 开机".format(self.computer_type))

def poweroff(self):
print("{} 关机".format(self.computer_type))


lap = Computer("laptop")
desk = Computer("desktop")

lap.poweron()
desk.poweroff()

% python main.py
laptop 开机
desktop 关机

在golang中,没有类的概念。但是Go通过stuct把接口和方法串联起来,在Go中使用interface接口来实现"类"这种抽象的效果

package main

import "fmt"

// 定义一个结构体,描述接口("类")的属性字段
type ClassSelf struct {
ComputerType string
}

// 定义一个接口("类"),以及这个接口内部可调用的<方法>
type Computer interface {
//方法的名称、参数以及返回值类型
PowerOn() string
PowerOff() string
}

// 正常的函数名称前面加一个"()" ,这个括号前面的括号叫做接收器
func (c ComputerName) PowerOn() string {
ret := fmt.Sprintf("%s 开机", c.Name)
return ret
}

// 在接收器里将结构体实例传入,这个函数这时候就实现了interface中的描述的<方法>
func (c ComputerName) PowerOff() string {
ret := fmt.Sprintf("%s 关机", c.Name)
return ret
}

func main() {
// 结构体实例化
var lap ClassSelf
lap.ComputerType = "laptop"

var desk ClassSelf
desk.ComputerType = "Desktop"

// 结构体实例化以后,就可以调用相关结构的方法了,
// 不需要再对interface实例化
fmt.Println(lap.PowerOn())
fmt.Println(desk.PowerOff())

}

举报

相关推荐

0 条评论