Go言語の通常の関数とメソッドの違いは何ですか?

青灯夜游
リリース: 2023-01-11 09:23:00
オリジナル
2279 人が閲覧しました

違い: 通常の関数の場合、レシーバーが値型の場合、ポインター型のデータを直接渡すことはできません。逆も同様ですが、メソッドの場合、レシーバーが値型の場合、メソッドを使用して直接呼び出すことができます。ポインタ型変数.メソッド、その逆も可能です。

Go言語の通常の関数とメソッドの違いは何ですか?

#この記事の動作環境: Windows10 システム、Go 1.11.2、thinkpad t480 コンピューター。

関連する推奨事項: 「

Go ビデオ チュートリアル

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

1.通常の関数は、受信側が値型の場合はポインタ型のデータを直接渡すことはできませんし、その逆も同様です。

2. メソッド (構造体メソッドなど) の場合、レシーバーが値型の場合、ポインタ型変数を使用してメソッドを直接呼び出すことができ、その逆も同様です。

以下は簡単な例です:

package structTest  
  
//普通函数与方法的区别(在接收者分别为值类型和指针类型的时候)  
//Date:2014-4-3 10:00:07  
  
import (  
    "fmt"  
)  
  
func StructTest06Base() {  
    structTest0601()  
    structTest0602()  
}  
  
//1.普通函数  
//接收值类型参数的函数  
func valueIntTest(a int) int {  
    return a + 10  
}  
  
//接收指针类型参数的函数  
func pointerIntTest(a *int) int {  
    return *a + 10  
}  
  
func structTest0601() {  
    a := 2  
    fmt.Println("valueIntTest:", valueIntTest(a))  
    //函数的参数为值类型,则不能直接将指针作为参数传递  
    //fmt.Println("valueIntTest:", valueIntTest(&a))  
    //compile error: cannot use &a (type *int) as type int in function argument  
  
    b := 5  
    fmt.Println("pointerIntTest:", pointerIntTest(&b))  
    //同样,当函数的参数为指针类型时,也不能直接将值类型作为参数传递  
    //fmt.Println("pointerIntTest:", pointerIntTest(b))  
    //compile error:cannot use b (type int) as type *int in function argument  
}  
  
//2.方法  
type PersonD struct {  
    id   int  
    name string  
}  
  
//接收者为值类型  
func (p PersonD) valueShowName() {  
    fmt.Println(p.name)  
}  
  
//接收者为指针类型  
func (p *PersonD) pointShowName() {  
    fmt.Println(p.name)  
}  
  
func structTest0602() {  
    //值类型调用方法  
    personValue := PersonD{101, "Will Smith"}  
    personValue.valueShowName()  
    personValue.pointShowName()  
  
    //指针类型调用方法  
    personPointer := &PersonD{102, "Paul Tony"}  
    personPointer.valueShowName()  
    personPointer.pointShowName()  
  
    //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用  
}
ログイン後にコピー

プログラミング関連の知識について詳しくは、

プログラミング コースをご覧ください。 !

以上がGo言語の通常の関数とメソッドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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