我一直在浏览这本书 Learn Go With Tests ,一直在考虑方法和函数之间的差异。
这是Learn Lea Go进行测试的报价...
一种方法是带有接收器的函数。方法声明将标识符(方法名称)绑定到方法,并将该方法与接收器的基本类型相关联。
方法与函数非常相似,但通过在特定类型的实例上调用它们来调用它们。您可以在任何喜欢的地方调用功能,例如区域(矩形),您只能在“事物”上调用方法。
- 学习测试,克里斯·詹姆斯(Chris James)
在GO中,函数和方法以彼此相似的方式声明。
使用func
关键字定义一个函数,然后使用包含任何输入参数的函数名称和括号。
// declare a function
func FunctionName(params Type) returnType {}
例如,此Add
函数采用两个输入参数,整数x和y,将它们添加在一起并返回结果:
// For example ...
func Add(x, y int) int {
return x + y
}
什么是功能?
函数是执行一个任务的代码块(但是,它 ymige 有很多代码,并在该任务的责任下执行各种操作。)它可以采用输入参数或者没有,与它们一起 ,并且可以返回值。
函数是独立的;可以从代码中的任何地方调用它们,而不会影响程序的其余部分。结果,函数可以帮助模块化代码,从而使其更容易维护和理解。
什么是方法?
还使用func
关键字定义了一种方法,其次是接收器类型和方法名称。接收器类型是该方法与之关联的类型,并且通过将类型名称放在方法名称之前,可以指定。
// declare a method
func (receiverName ReceiverType) MethodName(params) returnType {}
例如,我们可以定义一种类型,即Car
,该类型具有三个字段,即Make
,Model
和FuelConsumption
。然后,我们定义了一种称为GetCarbonFootprint
的方法,该方法计算用于汽车使用的燃料发射的二氧化碳。
type Car struct {
Make string
Model string
FuelConsumption float64
}
func (c Car) GetCarbonFootprint() float64 {
// Type Car emits 2.5kg of CO2 per litre
return c.FuelConsumption * 2.5
}
通过gudent in Go中,接收器变量是类型的第一个字母。该方法将Car
,c
作为其接收器,并将碳足迹返回为float64
类型。
当该类型的变量上调用方法时,您可以通过Celevername变量获得对其数据的引用。在许多其他编程语言中,这是隐式完成的,您可以通过
this
访问接收器。
要调用一种方法,我们在适当类型的变量c
的变量上使用点符号。
func main {
greenCar := Car{"VeryGreen", "E", 0.001}
redCar := Car{"RedRover", "Classic", 2.9}
greenCar.GetCarbonFootprint() // => 0.0025
redCar.GetCarbonFootprint() // => 4.75
}
概括
方法是函数与特定类型相关的。它们与非方法函数不同,因为它们是在类型范围内定义的,并且可以访问和修改该类型的字段。
可以从代码中的任何地方调用非方法。