Go言語でのメソッドの詳細説明

藏色散人
リリース: 2020-08-27 13:29:44
転載
2747 人が閲覧しました

次のコラムでは、Golang チュートリアル コラムから Go 言語のメソッドの理解を紹介します。

Go言語でのメソッドの詳細説明

go メソッド

定義

メソッドは、特別な受信機パラメーターを持つメソッドです。つまり、func とメソッド名の間のメソッド レシーバーです。

func (s Student) GetName() string  {
    return s.name}func (s *Student) SetName(name string) {
    s.name = name}
ログイン後にコピー

レシーバーの型がポインターであるメンバー メソッドはポインター メソッドと呼ばれ、レシーバーの型が非ポインターであるメンバー メソッドは値メソッドと呼ばれます。

オブジェクトを変更する必要がある場合は、ポインター (参照渡し) を使用する必要があります。それ以外の場合は、型をリテラル (値渡し) として宣言するだけです。また、メソッド呼び出しごとに値をコピーすることも避けてください。

type Integer intfunc (a *Integer) Increase(i Integer) {
    *a = *a + i}func main() {
    var a Integer = 2
    var b Integer = 2
    //a.Increase(b)
    //(&a).Increase(b)
    (*Integer).Increase(&a, b)
    fmt.Println(a)}
ログイン後にコピー

このメソッドは Integer クラスに属していませんが、Integer を指すポインター型に属しています。メソッドを呼び出すときに、インスタンス上で Increase メソッドを直接呼び出すことができるのは、Go 言語がコンパイル フェーズでは、 a が対応するポインター型 &a に自動的に変換されるため、実際の呼び出しコードは (&a).Increase(b) になります。

は実際にはシュガー構文です

type A struct {
  name string}func (a A) Name() string {
  a.name = "Hi! " + a.name  return a.name}func main() {
  a := A{name: "test"}

  fmt.Println(a.Name())

  fmt.Println(A.Name(a))}
ログイン後にコピー

a.Name() は実際には A.Name(a)## の構文です# Sugar、変数 a はいわゆるメソッド レシーバーです。

func NameOfA(a A) string {
  a.name = "Hi! " + a.name  return a.name}func main() {
  t1 := reflect.TypeOf(A.Name)
  t2 := reflect.TypeOf(NameOfA)

  fmt.Println(t1 == t2)// true}
ログイン後にコピー
Go 言語の関数型はパラメーターと戻り値にのみ関連するため、これら 2 つの型が等しいことにより、

メソッドが本質的に通常の関数であり、レシーバーが暗黙的な関数であることが証明されます。最初のパラメータ

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

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!