golangのメソッドの受け取り側がポインタである場合とそうでない場合の違いについて

藏色散人
リリース: 2021-04-19 19:43:40
転載
1464 人が閲覧しました

次のチュートリアル コラムでは、golang のメソッドの受信側がポインターである場合とそうでない場合の違いを紹介します。困っている友人の役に立てば幸いです。

golang のメソッドのレシーバーがポインターである場合とポインターではない場合の違い

golangのメソッドの受け取り側がポインタである場合とそうでない場合の違いについて

序文

I最近ウェブサイトで学生からの質問を見ました golang のメソッドの受信側がポインタである場合とポインタではない場合の違いは何ですか? ここでは、以下の学生を支援するために、簡単にわかりやすく説明します。 golang を学んだばかりです。

その方法とは

実際、この原理を理解していれば、上記の問題は基本的に理解できます。

メソッドは実際には特別な関数であり、レシーバーは暗黙的に渡される最初の実パラメータです。

例を教えてください

type test struct{
    name string
}

func (t test) TestValue() {
}

func (t *test) TestPointer() {
}

func main(){
    t := test{}
    
    m := test.TestValue
    m(t)
    
    m1 := (*test).TestPointer
    m1(&t)    
}
ログイン後にコピー
理解するのは簡単ですか? 次に、コードを追加しましょうポインタと非ポインタの違いを見てください。
type test struct{
    name string
}

func (t test) TestValue() {
    fmt.Printf("%p\n", &t)
}

func (t *test) TestPointer() {
    fmt.Printf("%p\n", t)
}

func main(){
    t := test{}
    //0xc42000e2c0
    fmt.Printf("%p\n", &t)
    
    //0xc42000e2e0
    m := test.TestValue
    m(t)
    
    //0xc42000e2c0
    m1 := (*test).TestPointer
    m1(&t)    

}
ログイン後にコピー

一部の生徒は、実際のパラメータがポインタでない場合に渡されると、値がコピーされることをすでに理解していると思います。

それでは、これらのメソッド セットの関係は何ですか? ここでは、qyuhen の golang 学習ノートを借りました。これもお勧めです。golang が好きな友人は、この本を読んでください。golang への理解が深まるでしょう。

• タイプ T メソッド セットには、すべての受信側 T メソッドが含まれます。
• タイプ

T メソッド セットには、すべての受信側 T

T メソッドが含まれます。
• 型 S に匿名フィールド T が含まれる場合、S メソッド セットには T メソッドが含まれます。

• 型 S に匿名フィールド
T が含まれる場合、S のメソッド セットには T 個の

T メソッドが含まれます。
• T または T の埋め込みに関係なく、S メソッドのセットには常に T *T メソッドが含まれます。

結論
golang はシンプルで使いやすいですが、まだ多くの落とし穴があります。筆者は golang を使用する過程で多くの落とし穴に遭遇しました。これについては、ブログで説明します。後ほど。どなたでも歓迎です。一緒に話し合ってください。

以上がgolangのメソッドの受け取り側がポインタである場合とそうでない場合の違いについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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