Go言語のメソッドと関数の違い

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

    効果は次のとおりです。


図(1)メソッドはオブジェクトによって呼び出される必要があり、関数はオブジェクトなしで呼び出すことができます

おすすめ

転載: blog.csdn.net/sanqima/article/details/108902541