Goには、関数とメソッドが同時に存在します。メソッドの本質は関数ですが、メソッドと関数には異なる点があります。
差:
- 意味が異なります
1.1)関数関数は、コードの再利用を実現するために繰り返し呼び出すことができる、固有の関数を持つコードの一部です。メソッドはクラスの関数であり、このクラスのオブジェクトのみを呼び出すことができます。 - メソッドにはレシーバーがありますが、関数にはレシーバーがありません
2.1)Go言語のメソッドは、特定のタイプの変数で機能する関数です。この特定のタイプの変数は、レシーバー(レシーバー、レシーバー、レシーバー)と呼ばれます。
2.2)受信者の概念は、従来の対面言語のthisまたはselfキーワードに似ています
。2.3)Go言語の受信者は、メソッドにはアクションオブジェクトがありますが、関数にはアクションオブジェクトがないことを強調します
。2.4)1つメソッドはレシーバーを含む関数です
。2.5)Goでは、レシーバーのタイプは、構造だけでなく、構造タイプ以外の任意のタイプにすることができます。 - 関数に同じ名前を付けることはできず、メソッドに同じ名前を付けることもできます
。3.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)
}
効果は次のとおりです。