golang関数のメソッド

WBOY
リリース: 2023-05-05 21:51:07
オリジナル
525 人が閲覧しました

Golang は、高性能、強力に型指定された高速実行プログラミング言語であり、オブジェクト指向プログラミングのアイデアをサポートし、関数とメソッドを定義する非常に柔軟な方法を備えています。この記事では、Golangにおける関数やメソッドの定義、パラメータの受け渡し、呼び出し、一般的な実装方法などを詳しく紹介します。

1. 関数の定義と使い方

Golang で関数を定義するのは非常に簡単で、基本的な構文は次のとおりです:

func 函数名(参数1 类型1, 参数2 类型2, …) 返回类型 {
    //函数体代码
    return 返回值
}
ログイン後にコピー

その中で、function name は関数の名前、parameters は関数の入力値、return type は関数の出力値の型です。関数本体のコードでは、必要なことを何でも実行でき、return キーワードを使用して、返したい値を返すことができます。

たとえば、次の関数は 2 つの数値の合計を計算するために使用されます:

func add(a int, b int) int {
    return a + b
}
ログイン後にコピー

関数呼び出しも非常に簡単で、関数名とパラメーターを指定するだけです:

result := add(1, 2) //输出结果为3
ログイン後にコピー

2. メソッドの定義と使用法

Golang のメソッドは関数とよく似ていますが、特定の型または変数に関連付けられています。メソッドは通常、構造、インターフェイス、またはその他の型のプロパティを変更したり返したりするために使用されます。メソッドの基本構文は次のとおりです。

func (t 类型) 方法名(参数 参数类型) 返回类型 {
    //方法体代码
    return 返回值
}
ログイン後にコピー

(t type) は、メソッドが t 型に関連付けられていることを示します。メソッド本体コードでは、t を通じてその型のプロパティとメソッドにアクセスできます。関数と同様に、メソッドでもレシーバー、つまりメソッドがアタッチされるインスタンスを定義できます。

たとえば、これは Rect という名前の四角形タイプです。これには、四角形の面積を計算する Area メソッドがあります:

type Rect struct {
    width, height int
}

func (r Rect) Area() int {
    return r.width * r.height
}
ログイン後にコピー

この例では、width および height プロパティを持つ Rect という名前の四角形タイプを定義します。また、長方形のプロパティを使用して面積を計算する Area というメソッドも定義します。レシーバーとして長方形型を使用するため、そのインスタンスを通じて Area メソッドを呼び出すことができます。

r := Rect{width: 10, height: 5}
result := r.Area()    //输出结果为50
ログイン後にコピー

3. 可変パラメーターの使用

Golang では、次のことができます。 ... (3 つのドット) を使用して可変引数パラメーターを定義します。これは、関数またはメソッドが任意の数のパラメータを取ることができることを意味します。たとえば、可変引数パラメーターを含む関数を次に示します。

func sum(nums ...int) int {
    result := 0
    for _, num := range nums {
        result += num
    }
    return result
}
ログイン後にコピー

この関数は、int 型の nums という名前の可変引数パラメーターを受け入れます。このパラメータに任意の数の整数を渡すことで、この関数を呼び出すことができます:

result1 := sum(1, 2, 3, 4) //输出结果为10
result2 := sum(10, 20, 30) //输出结果为60
ログイン後にコピー

4. クロージャの使用

Golang におけるクロージャとは、関数がその外側の定義にアクセスできることを意味します。関数が戻った後もまだ存在します。これは、Golang の関数は第一級の関数であり、変数のように渡して使用できるためです。たとえば、簡単なクロージャの例を次に示します。

func intSeq() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

nextInt := intSeq()
fmt.Println(nextInt()) //输出结果为1
fmt.Println(nextInt()) //输出结果为2
ログイン後にコピー

この例では、関数 intSeq を返す関数を作成します。この関数は、クロージャの一部である変数 i を定義します。返される関数はクロージャでもあり、i にアクセスしてインクリメントできます。 intSeq から関数を取得し、それを nextInt と呼び、それを使用して 2 つの整数を取得します。

5. インターフェイスの使用

Golang では、インターフェイスは、一部のオブジェクトの動作を定義する一連のメソッドの宣言です。 Java や C# などのプログラミング言語とは異なり、Golang のインターフェイスは暗黙的です。型がインターフェイス内のすべてのメソッドを定義している場合、その型は明示的な implementsstatement を必要とせずにインターフェイスを自動的に実装します。たとえば、インターフェイスとインターフェイスの実装の例を次に示します。

type Shape interface {
    Area() float64
    Perimeter() float64
}

type Rect struct {
    width float64
    height float64
}

func (r Rect) Area() float64 {
    return r.width * r.height
}

func (r Rect) Perimeter() float64 {
    return 2 * (r.width + r.height)
}
ログイン後にコピー

この例では、Shape という名前のインターフェイスを定義し、そのための 2 つのメソッドを定義します。エリア周囲。また、Rect という名前の四角形タイプを定義し、Shape インターフェイスの 2 つのメソッドを実装しました。これは、Rect 型が Shape インターフェイスを自動的に実装することを意味します。

最後に、

Shape インターフェイス型の変数を作成し、それに Rect 型の値を割り当てます。この場合、Shape インターフェイスの Area メソッドと Perimeter メソッドを呼び出すことができます。

var s Shape
s = Rect{width: 10, height: 5}
fmt.Println(s.Area())       //输出结果为50
fmt.Println(s.Perimeter())  //输出结果为30 
ログイン後にコピー
まとめると、Golang の関数とメソッド非常に柔軟な定義と実装を備えています。可変長引数、クロージャ、インターフェイスなどの機能を使用すると、より強力で柔軟なプログラムを作成できます。

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

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