Go语⾔,同时有函数和⽅法,⽅法的本质是函数,但是⽅法和函数⼜具有不同点。
不同点:
- 含义不同
1.1)函数function是⼀段具有独⽴功能的代码,可以被反复多次调⽤,从⽽实现代码复⽤。⽽⽅法method是⼀个类的⾏为功能,只有该类的对象才能调⽤。 - ⽅法有接受者,⽽函数⽆接受者
2.1)Go语⾔的⽅法method是⼀种作⽤于特定类型变量的函数,这种特定类型变量叫做Receiver(接受者、接收者、接收器);
2.2)接受者的概念类似于传统⾯向对象语⾔中的this或self关键字;
2.3)Go语⾔的接受者强调了⽅法具有作⽤对象,⽽函数没有作⽤对象;
2.4)⼀个⽅法就是⼀个包含了接受者的函数;
2.5)Go语⾔中, 接受者的类型可以是任何类型,不仅仅是结构体, 也可以是struct类型外的其他任何类型。 - 函数不可以重名,⽽⽅法可以重名
3.1)只要接受者不同,则⽅法名可以⼀样。 - 调用方式不一样
4.1) 方法是struct对象通过.点号+名称来调用,而函数是直接使用名称来调用。
案例如下:
//myMethod01.go
// myMethodDes project main.go
package main
import (
"fmt"
)
type Employee struct {
name, currency string
salary int
}
//接收者类型为Employee
func (e Employee) displaySalary() {
fmt.Println("员工姓名: %s, 薪资: %s%d\n", e.name, e.currency, e.salary)
}
//函数参数为Employee类型
func displaySalary(e Employee) {
fmt.Printf("员工姓名: %s, 薪资: %s%d\n", e.name, e.currency, e.salary)
}
func main() {
//fmt.Println("Hello World!")
emp1 := Employee{
name: "Daniel Wang",
salary: 2000,
currency: "$", //货币单位
}
//调用方法
emp1.displaySalary()
//调用函数
displaySalary(emp1)
}
效果如下: