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