目次
1.その方法とは何ですか?
2. メソッドの定義
3. メソッドの呼び出し
4. メソッドのオーバーロード
5. 概要
ホームページ バックエンド開発 Golang Golang は独自のメソッドを作成します

Golang は独自のメソッドを作成します

May 14, 2023 pm 09:09 PM

Golang は急速に成長しているプログラミング言語です。C 言語と同等の表現力と効率性を備え、さまざまなプログラミング ニーズを満たす多数の標準ライブラリとさまざまなツールも備えています。 Golang はオブジェクト指向プログラミングもサポートしており、そのメソッドは重要な機能です。この記事では、Golang でメソッドを自分で記述する方法を紹介します。

1.その方法とは何ですか?

Golang では、メソッドとは、構造体 (struct) またはインターフェイス (interface) で定義された特別なシグネチャを持つ関数です。メソッドには、値メソッドまたはポインター メソッドを指定できます。値メソッドは構造体のコピーを操作しますが、ポインター メソッドは構造体のポインターを操作します。つまり、構造体の状態はポインター メソッドで変更できることを意味します。

以下は使用例です:

package main

import "fmt"

type Rect struct {
    width, height float64
}

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

func main() {
    r := Rect{3, 4}
    fmt.Println("Area:", r.area())
}

上記のコードでは、Rect 型の構造体を作成します。次に、 area メソッドが定義され、レシーバーは Rect 型で、戻り値は float64 型の area です。 main 関数では、Rect インスタンスを作成し、area メソッドを呼び出して面積を計算し、出力します。

2. メソッドの定義

Golang では、メソッドを作成するには、最初に構造またはインターフェイスを定義する必要があります。次に、構造体またはインターフェイスにメソッドを定義します。以下は、使用法メソッドとポインター メソッドを定義する例です。

type Person struct {
    name string
    age  int
}

func (p Person) SayHello() {
    fmt.Println("Hello, my name is", p.name)
}

func (p *Person) SetAge(age int) {
    p.age = age
}

上の例では、名前と年齢の 2 つのフィールドを持つ Person 構造体を定義します。パラメーターを受け取らず、人の名前を出力するだけで値を返す SayHello メソッドを定義しました。また、SetAge メソッドも定義します。このメソッドは、整数をパラメータとして渡し、それを Person インスタンスの age プロパティとして設定します。

SayHello メソッドを呼び出すと、Person インスタンスが自動的にメソッドに渡されます。 SetAge メソッドでは、Person インスタンスの内部状態を変更するため、レシーバーとしてポインターを使用します。

3. メソッドの呼び出し

Golang では、メソッドの呼び出しにはドット (.) 演算子が必要です。次の例は、上の例で定義したメソッドを呼び出す方法を示しています。

p1 := Person{"Tom", 20}
p1.SayHello()  // Hello, my name is Tom

p2 := &Person{"Sam", 25}
p2.SetAge(30)
fmt.Println(p2.age) // 30

この例では、2 つの Person インスタンスを作成します。1 つは構造リテラルを使用し、もう 1 つは new 演算子を使用して新しいオブジェクトへのポインタを返します。割り当て Person インスタンスへのポインタ。

括弧を使用して p1.SayHello メソッドを呼び出します。この時点では、メソッドが自動的に p1 としてインスタンスを渡すため、インスタンスを渡す必要はありません。 p2.SetAge メソッドの場合、p2 ポインターを指すアドレスを渡す必要があります。そうしないと、インスタンスのプロパティにアクセスできません。

4. メソッドのオーバーロード

Golang では、メソッドをオーバーロードすることもできます。つまり、複数のメソッドを同じレシーバー タイプに定義します。以下はメソッドのオーバーロードの例です。

type Rect struct {
    width, height float64
}

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

func (r Rect) Perimeter() float64 {
    return 2 * (r.width + r.height)
}

func main() {
    r := Rect{3, 4}
    fmt.Println("Area:", r.Area())
    fmt.Println("Perimeter:", r.Perimeter())
}

上の例では、Area と Perimeter という 2 つのメソッドを定義しました。どちらも Rect 型を操作しますが、それらのシグネチャは異なります。これら 2 つのメソッドを main 関数でそれぞれ呼び出して、長方形の面積と周囲長を計算できます。

5. 概要

このメソッドは Golang の非常に重要な機能であり、利便性を提供します。メソッドの書き方と呼び出し方は、Golang プログラマーが習得すべき基本的なスキルです。値メソッドとポインター メソッドを使用して構造体を操作したり、オーバーロード メソッドを使用して型操作を簡単に実行したりできます。もちろん、ポインターと値の転送の違いにも注意し、必要に応じてポインター メソッドを使用して構造体のプロパティを変更する必要があります。

この記事では、Golang でメソッドを記述する方法に関する基本的な知識とスキルを提供します。読者は、Golang でのメソッドの使用についてより深く理解し、習得する必要があります。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

GoでKubernetesオペレーターの開発 GoでKubernetesオペレーターの開発 Jul 25, 2025 am 02:38 AM

Kubernetesoperatorを書く最も効率的な方法は、Goを使用してKubeBuilderとController-Runtimeを組み合わせて使用することです。 1.オペレーターのパターンを理解する:CRDを介してカスタムリソースを定義し、コントローラーを作成してリソースの変更を聞き、和解ループを実行して予想される状態を維持します。 2。KubeBuilderを使用してプロジェクトを初期化し、APIを作成してCRD、コントローラー、構成ファイルを自動的に生成します。 3. API/V1/MyApp_Types.goでCRDの仕様とステータス構造を定義し、MakeManifestsを実行してCrdyamlを生成します。 4。コントローラーの和解

HTTPミドルウェアロギングの例を例に進めます HTTPミドルウェアロギングの例を例に進めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開始時間と終了時間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開始に適しています。拡張機能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

Go byの例でStdinから読む Go byの例でStdinから読む Jul 27, 2025 am 04:15 AM

FMT.Scanfを使用して、単純な構造化データに適したフォーマット入力を読み取りますが、スペースに遭遇すると文字列が切断されます。 2。bufio.scannerを使用して行ごとに読み取り、マルチライン入力、EOF検出、パイプライン入力をサポートし、スキャンエラーを処理できることをお勧めします。 3。Io.Readall(os.stdin)を使用して、すべての入力を一度に読み取ります。大きなブロックデータまたはファイルストリームの処理に適しています。 4.リアルタイムの主要な応答には、golang.org/x/termなどのサードパーティライブラリが必要であり、Bufioは従来のシナリオには十分です。実用的な提案:インタラクティブなシンプルな入力にFMT.SCANを使用し、ライン入力またはパイプラインにbufio.scannerを使用し、io.readallを使用して大規模なブロックデータを使用し、常に処理します

SwitchステートメントはGOでどのように機能しますか? SwitchステートメントはGOでどのように機能しますか? Jul 30, 2025 am 05:11 AM

Goのスイッチステートメントは、デフォルトでプロセス全体で実行されず、最初の条件に合わせた後に自動的に終了します。 1.スイッチはキーワードで始まり、1つまたはnoの値を持ち運ぶことができます。 2。上から下へのケースマッチは、最初の一致のみが実行されます。 3.複数の条件をコンマでリストして、同じケースに一致させることができます。 4.手動で休憩を追加する必要はありませんが、強制することができます。 5.デフォルトは、通常最後に配置されている比類のないケースに使用されます。

Jul 29, 2025 am 04:10 AM

ストリーミングデータについては、Kafkaと統合します ストリーミングデータについては、Kafkaと統合します Jul 26, 2025 am 08:17 AM

GoとKafka Integrationは、高性能のリアルタイムデータシステムを構築するための効果的なソリューションです。適切なクライアントライブラリは、ニーズに応じて選択する必要があります。1。カフカゴーが優先され、迅速な開発に適したシンプルなゴースタイルAPIと優れたコンテキストサポートを取得します。 2.微細な制御または高度な機能が必要な場合は、サラマを選択します。 3.プロデューサーを実装する場合、正しいブローカーアドレス、テーマ、ロードバランス戦略を構成し、コンテキストを通じてタイムアウトと閉鎖を管理する必要があります。 4.消費者は、消費者グループを使用してスケーラビリティとフォールトトレランスを実現し、オフセットを自動的に送信し、合理的に同時処理を使用する必要があります。 5.シリアル化にはJSON、Avro、またはProtobufを使用すると、Schemaregistrを組み合わせることをお勧めします

GOでセットデータ構造を効率的に実装する方法は? GOでセットデータ構造を効率的に実装する方法は? Jul 25, 2025 am 03:58 AM

GOには組み込みのコレクションタイプはありませんが、マップを介して効率的に実装できます。マップ[t] struct {}を使用して要素キーを保存し、空の構造にはメモリオーバーヘッドがゼロになり、追加、検査、削除、その他の操作の実装はo(1)時間の複雑さです。同時環境では、sync.rwmutexまたはsync.mapを組み合わせて、スレッドの安全性を確保することができます。パフォーマンス、メモリの使用、ハッシュコスト、障害の観点から。標準の収集動作をシミュレートするために、add、削除、含有、サイズ、およびその他の方法をカプセル化することをお勧めします。

GOアプリケーションの標準プロジェクトレイアウトは何ですか? GOアプリケーションの標準プロジェクトレイアウトは何ですか? Aug 02, 2025 pm 02:31 PM

答えは次のとおりです。GOアプリケーションには必須のプロジェクトレイアウトがありませんが、コミュニティは一般に、保守性とスケーラビリティを改善するために標準構造を採用しています。 1.CMD/プログラムの入り口を保存します。各サブディレクトリは、CMD/MyApp/Main.goなどの実行可能ファイルに対応しています。 2.内部/保存プライベートコード、外部モジュールによってインポートすることはできず、ビジネスロジックとサービスのカプセル化に使用されます。 3.PKG/ストア他のプロジェクトをインポートするための公に再利用可能なライブラリ。 4.API/オプションでOpenapi、Protobuf、およびその他のAPI定義ファイルを保存します。 5.Config/、Scripts/、およびWeb/Store構成ファイル、スクリプト、Webリソース。 6.ルートディレクトリにはgo.mod and go.sumが含まれています

See all articles