golangメソッドの機能の違い

王林
リリース: 2023-05-10 12:16:37
オリジナル
604 人が閲覧しました

Go プログラミング言語では、タスクを実行して結果を返すためにメソッドと関数をよく使用します。どちらも同じ結果を生成しますが、オブジェクト指向プログラミングにおける役割は異なります。この記事では、Go のメソッドと関数の違いを分析します。

メソッドと関数の定義

Go では、関数とメソッドの定義は似ていますが、構文と使用法が異なります。

Go では、関数はパラメーターを受け取り、結果を返すことができるプログラム コードの独立したブロックです。関数はプログラム内のどこからでも呼び出すことができ、特定のデータ構造は必要ありません。簡単な関数の例を次に示します。

func add(x int, y int) int {
    return x + y
}
ログイン後にコピー

メソッドはデータ構造に関連付けられた関数であり、特定の型の追加のレシーバー パラメーターを持ち、その型の値で動作することが保証されています。 アクションを実行します。たとえば、次のコードはメソッド定義を示しています。

type person struct {
    name string
    age  int
}

func (p person) PrintName() {
    fmt.Println(p.name)
}
ログイン後にコピー

上記のコードでは、PrintName()person のメンバーとして定義されているメソッドです。構造受信機。つまり、このメソッドは person オブジェクト内でのみ呼び出すことができます。

構文の違い

関数の構文は次のとおりです:

func functionName(parameterName type) returnType {
    // Function code goes here
}
ログイン後にコピー

メソッドの構文は次のとおりです:

func (receiverName ReceiverType) MethodName(parameterName type) returnType {
    // Method code goes here
}
ログイン後にコピー

メソッド内、関数名 A レシーバー (オブジェクトまたはインターフェイスとも呼ばれます) の前に指定する必要があります。レシーバーは、カスタム タイプを含む任意のタイプにすることができます。受信者がポインターの場合、メソッドはその値を変更できます。

メソッド呼び出しの違い

関数はプログラム内のどこからでも呼び出すことができます。たとえば、次のコードは、プログラム内のさまざまな場所で関数を実行する方法を示しています。

func main() {
    fmt.Println(add(1, 2))
    fmt.Println(sayHello())
}

func add(x, y int) int {
    return x + y
}

func sayHello() string {
    return "Hello World!"
}
ログイン後にコピー

対照的に、メソッドは、関連付けられているオブジェクトでのみ呼び出すことができます。簡単な例を次に示します。

package main

import "fmt"

type person struct {
    name string
    age  int
}

func (p person) PrintName() {
    fmt.Println(p.name)
}

func main() {
    p := person{"John", 25}
    p.PrintName()
}
ログイン後にコピー

上記のメソッド呼び出しでは、PrintName メソッドは person 構造型でのみ呼び出すことができます。

継承とポリモーフィズム

メソッドは構造間で継承でき、メソッドをオーバーライドしてポリモーフィズムを実装できます。これは、メソッドが特定の型に関連付けられているためです。この継承とポリモーフィズムにより、Go は強力なオブジェクト指向プログラミング言語になります。

一方、関数は継承したりポリモーフィックにしたりすることはできません。これらはメソッドとは異なり、特定の型に依存しないため、多態性を実現するためにオーバーライドすることはできません。

概要

関数とメソッドはどちらも同じ結果を生成できますが、使用方法と設計が異なります。メソッドは、関連付けられた型でのみ呼び出すことができ、継承とポリモーフィズムの特性を持ちます。一方、関数はコード内のどこでも呼び出され、継承やポリモーフィズムの特性を持ちません。したがって、コードを記述するときは、これらの違いを考慮して、メソッドや関数を正しいコンテキストで使用できるようにします。

以上がgolangメソッドの機能の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート