Golangを使用してクラスを実装する方法

PHPz
リリース: 2023-04-05 09:17:42
オリジナル
758 人が閲覧しました

Golang は、多くの高度な機能を備えた非常に人気のあるプログラミング言語です。主な特徴の 1 つはオブジェクト指向プログラミングであり、構造体を使用してオブジェクト指向のクラスと同様の概念を実装できます。この記事ではGolangを使ってクラスを実装する方法を紹介します。

  1. 構造

Golang では、構造体は、関連するデータ フィールドのセットを格納するために使用されるカスタム データ型です。文字列、整数、浮動小数点など、さまざまなタイプのフィールドを含めることができます。

構造体を定義するための構文は次のとおりです。

type StructName struct {
    field1 type1
    field2 type2
    ...
}
ログイン後にコピー

このうち、StructName は構造体の名前、field1、## です。 #field2 などは構造体のフィールド名、type1type2 などは対応するフィールドのデータ型です。

たとえば、次の単純な構造

Person には、名前と年齢の 2 つのフィールドが含まれています。

type Person struct {
    Name string
    Age int
}
ログイン後にコピー
構造を定義した後、それを使用して次の関数を作成できます。インスタンス。

p := Person{
    Name: "张三",
    Age: 18,
}
ログイン後にコピー
    メソッド
Golang では、メソッドはポインタ レシーバまたは値レシーバの関数です。メソッドは通常の関数と同様の構文を持ちますが、構造体に関連付けることができるため、オブジェクト指向メソッドのクラスのメソッドと同様の概念を実装できます。メソッドは構造体のフィールドにアクセスできます。

メソッドを定義するための構文は次のとおりです。

func (receiver ReceiverType) MethodName(args...) return_type {
    // 方法实现
}
ログイン後にコピー
このうち、

receiver はメソッド レシーバー、ReceiverType はポインタまたは値の型、 MethodName はメソッド名、args はパラメータ、return_type は戻り値の型です。

次の例は、

Person 構造体にメソッド SayHello を定義して、挨拶できるようにする方法を示しています。

func (p Person) SayHello() {
    fmt.Printf("您好,我叫%s,今年%d岁。\n", p.Name, p.Age)
}
ログイン後にコピー
このメソッドは、

Person 型のレシーバーを受け入れ、Person インスタンスの名前と年齢を出力します。

    継承
継承は、オブジェクト指向プログラミングにおける重要な概念です。これにより、クラスが別のクラスのプロパティとメソッドを「継承」し、それに基づいて拡張することができます。

Golang では、継承は直接サポートされている機能ではありません。ただし、合成を使用すると、継承と同様の効果を実現できます。

具体的には、他の構造体へのポインターを含む構造体を定義し、そのメソッドを拡張することで継承を実装できます。

たとえば、

person 型のフィールドとクラスを表す別のフィールドを含む Student 構造体を定義できます。

type Student struct {
    person *Person
    class string
}
ログイン後にコピー
次に、

Student 構造体の Person 構造体のメソッドを拡張できます。メソッドの実装では、person フィールドを使用して、person 構造体のフィールドにアクセスできます。

func (s Student) Study() {
    fmt.Printf("%s在%s班级学习...\n", s.person.Name, s.class)
}

func (s Student) SayHello() {
    s.person.SayHello()
    fmt.Printf("我在%s班级上学。\n", s.class)
}
ログイン後にコピー
    完全な例
Golang を使用してクラスを実装する方法を示す完全な例を次に示します。

package main

import "fmt"

type Person struct {
    Name string
    Age int
}

func (p Person) SayHello() {
    fmt.Printf("您好,我叫%s,今年%d岁。\n", p.Name, p.Age)
}

type Student struct {
    person *Person
    class string
}

func (s Student) Study() {
    fmt.Printf("%s在%s班级学习...\n", s.person.Name, s.class)
}

func (s Student) SayHello() {
    s.person.SayHello()
    fmt.Printf("我在%s班级上学。\n", s.class)
}

func main() {
    p := Person{
        Name: "张三",
        Age: 18,
    }
    s := Student{
        person: &p,
        class: "高中一年级",
    }

    s.SayHello()
    s.Study()
}
ログイン後にコピー
上記のコードを実行すると、出力結果は次のようになります:

您好,我叫张三,今年18岁。
我在高中一年级班级上学。
ログイン後にコピー
    概要
Golang は、オブジェクト指向プログラミングと同様の機能を提供します。クラスの概念を実装するための構造体とメソッド。 Golang は継承を直接サポートしていませんが、合成を使用して継承と同様の効果を実現できます。これらの機能により、Golang でオブジェクト指向プログラミング スタイルのコードを書くことができます。

以上がGolangを使用してクラスを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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