golang メソッドの使用を開始する

WBOY
リリース: 2023-05-22 17:03:39
オリジナル
443 人が閲覧しました

Golang は、強力に型指定され、静的に型指定されたプログラミング言語であり、優れたパフォーマンス、同時実行性、シンプルさ、セキュリティを備えています。中でもメソッドは、プログラマーが構造をより便利に操作できるようにする Golang の非常に重要な概念です。この記事では、初心者がメソッドの使用にすぐに慣れることができるように、メソッドの定義、呼び出し、継承など、Golang のメソッドを読者に紹介します。

1. メソッドの定義

メソッドは、呼び出す前にレシーバーが必要な特別な関数です。レシーバーは、構造型または非構造型 (int、float など) のいずれかになります。メソッドは、構造体が配置されているパッケージだけでなく、任意のパッケージで定義できます。

メソッドの定義形式は次のとおりです。

func (接收器变量 接收器类型) 方法名(参数列表)(返回值列表){
    // 函数体
}
ログイン後にコピー

レシーバー変数には任意の有効な変数名を使用でき、レシーバーの型は任意の型にすることができますが、現在のパッケージ。メソッド内では、レシーバー変数を使用して、レシーバーに含まれるフィールドとメソッドにアクセスできます。

レシーバーには 2 つのタイプがあります:

  • 値型レシーバー (値レシーバー): 値型レシーバーを使用するメソッドは、呼び出されたときにレシーバーのコピーを作成します。レシーバーへの変更は次のとおりです。元の変数には反映されません。
  • ポインタ型レシーバ (ポインタ レシーバ): ポインタ型レシーバを使用するメソッドはレシーバをコピーせず、メソッド内でのレシーバへの変更は元の変数に直接反映されます。

サンプル コードは次のとおりです:

type Rect struct{
    width, height float64
}

// 定义求面积的方法(值类型接收器)
func (r Rect) area() float64{
    return r.width * r.height
}

// 定义求面积的方法(指针类型接收器)
func (r *Rect) areaPtr() float64{
    return r.width * r.height
}
ログイン後にコピー

上記のコードでは、長方形の面積を見つけるための 2 つのメソッドを定義しています。1 つは値型レシーバーを使用し、他にはポインタ型受信機を使用します。

2. メソッド呼び出し

は関数呼び出しと似ており、メソッド呼び出しにはドット演算子を使用する必要があります。メソッドを呼び出すと、Golang はメソッドのレシーバーの型を自動的に解決し、メソッドが属するレシーバーを最初のパラメーターとして渡します。

サンプル コードは次のとおりです。

package main

import "fmt"

type Rect struct{
    width, height float64
}

// 定义求面积的方法(值类型接收器)
func (r Rect) area() float64{
    return r.width * r.height
}

// 定义求面积的方法(指针类型接收器)
func (r *Rect) areaPtr() float64{
    return r.width * r.height
}

func main(){
    rect := Rect{10, 20}

    // 调用值类型接收器的方法
    fmt.Println(rect.area())     // 输出:200

    // 调用指针类型接收器的方法
    fmt.Println(rect.areaPtr())  // 输出:200

    // 使用&符号获取指针,再调用指针类型接收器的方法
    fmt.Println((&rect).areaPtr()) // 输出:200
}
ログイン後にコピー

上記のコードでは、四角形 Rect を作成し、その 2 つのメソッドを呼び出しました。

値型レシーバーのメソッドを使用する場合、レシーバーが構造体の値型である場合、そのフィールドの値は変更されないことに注意してください。ポインタ型レシーバメソッドを使用する場合、レシーバが構造体のポインタ型の場合、そのフィールドの値が変更されます。

3. メソッドの継承

Golang では、型は他の型を組み合わせることで継承を実現できます。継承プロセス中に、サブタイプのメソッドは親タイプのメソッドをオーバーライドして、独自のロジックを実装できます。

サンプル コードは次のとおりです。

package main

import "fmt"

type Shape interface{
    area() float64
}

type Rect struct{
    width, height float64
}

// 定义矩形类的方法
func (r Rect) area() float64{
    return r.width * r.height
}

type Circle struct{
    radius float64
}

// 定义圆形类的方法
func (c Circle) area() float64{
    return 3.14 * c.radius * c.radius
}

func main(){
    rect := Rect{10, 20}
    circle := Circle{10}

    // 创建形状对象,使用接口类型接收
    var shape Shape

    // 将矩形类型赋值给接口类型
    shape = rect
    fmt.Println(shape.area())   // 输出:200

    // 将圆形类型赋值给接口类型
    shape = circle
    fmt.Println(shape.area())   // 输出:314
}
ログイン後にコピー

上記のコードでは、面積を計算するメソッドを含む Shape インターフェイスを定義します。次に、2 つの形状タイプ Rect と Circle を定義しました。これらはそれぞれ Shape インターフェイスの area メソッドをカバーします。最後に、Rect タイプと Circle タイプをそれぞれ Shape インターフェイス タイプに割り当てて、面積を計算します。

概要:

この記事では、Golang でのメソッドの定義、呼び出し、継承に関する知識を紹介します。この記事を学ぶことで、読者は Golang におけるメソッドの重要な概念の役割を理解し、その基本的な使用スキルを習得することができます。これに基づいて、読者は Golang の構文とアプリケーションをさらに学習し、より高度なメソッドの使用スキルを習得し、プログラミング能力を向上させることができます。

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

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