ゴー言語のポインタ値方式と受信方法受信者

 囲碁の言語でただ一つの引数recipient'reの機能、メソッドや関数を定義することであり、それは方法です  func と識別子の間に1つの以上の引数。受信者および関数funcキーワードの名前の間で定義されました:

人型の構造体{ 
    名の文字列の
    年齢のint 
} 

FUNC(P人)と言う(){ 
    fmt.Printf(" 私は%sのよ、%d個歳\ N " 、p.name、p.age)
}

受信者は、1つの受信機の受信者へのポインタの値であり、両者を有しています。名前が示唆するように、受信者の値は、受信者は、値の種類は、その実際の受信者を変更しない内部メソッドのコピーである、ポインタ受信者は、受信者がポインタの受取人への参照されるタイプ参照の実際の受信者の間この効果を修正。
2つのコードを見てください
コードワン:
メインパッケージ

のインポート" のfmt " 

Person型のstruct { の文字列の
   年齢のint 
} 
FUNC(P人)と言う(){ 
   fmt.Printfを(" 私は、%Dの歳\ nは%sのだ" 、p.name、p.age )
} 
FUNC {(P人)古い()
   p.age = p.age + 1 
} 
メインFUNC(){ 
   VAR人=人{P1 " zhansan "16 } 
   p1.older()
   p1.say()
   // 出力:私はzhangsan、16歳です
   のvar * p2の人=&人{" リージ"17 } 
   p2.older()
   p2.say()
   // 出力:私はリージ、17歳です 
}

 出力:

#gosetup 
I ' m個のzhansan、16歳 
I ' 17歳メートルのリージ、

コードII:

メインパッケージ

のインポート" のfmt " 

Person型のstruct { の文字列の
    年齢のint 
} 
FUNC(P人)と言う(){ 
    fmt.Printfを(" 私は、%Dの歳\ nは%sのだ" 、p.name、p.age )
} 
FUNC(P * 人)古い(){ 
    p.age = p.age + 1 
} 
メインFUNC(){ 
    VARの P1人=人{ " zhansan "16 } 
    p1.older()
    p1.say()
    / / 出力:私はzhangsanよ、17歳
    VARP2 *人=&パーソン{ " リージ"17 } 
    p2.older()
    p2.say()
    // 出力:アイム・リージ、18歳 
}

出力:

#gosetup 
I ' m個のzhansan、17歳 
I ' 18歳メートルのリージ、

この差が第1のコード値が受信者の方法で、古い()メソッドに2つのだけのコードであり、コードの第2のセグメントは、レシピエントメソッドへのポインタです。

おすすめ

転載: www.cnblogs.com/tianyun5115/p/12613036.html