Golang関数に構造体型の応用スキルを埋め込む
Golang 関数の構造型のアプリケーション スキルの埋め込み
Golang は、構造型の定義である「オブジェクト」のカプセル化をサポートする、厳密に型指定されたプログラミング言語です。埋め込み型を構造型で使用して、既存の型を拡張することもできます。 Golang では、埋め込み型は実際に、型の名前を別の構造型のフィールド型として使用します。
この記事では、構造型の埋め込みの応用スキル、具体的には、Golang 関数で型が埋め込まれた構造を使用する方法について説明します。
構造型の埋め込み
Golang に構造型を埋め込むには、主に 2 つの方法があります。1 つは構造型名を匿名フィールドとして使用する方法、もう 1 つは指定された型名を使用する方法です。ここでは主に最初の方法について説明します。
構造体の型名を匿名フィールドとして使用する場合、埋め込み構造体は匿名構造体のすべてのフィールドとメソッドを継承し、独自のフィールドとメソッドとして使用します。次の例を見てください:
1 2 3 4 5 6 7 8 |
|
上の例では、2 つの構造タイプ Animal
と person
を定義します。ここで、Person
The Animal
構造タイプは、Animal
構造 ## で定義された Name
および Age を
person 構造が継承できるように埋め込まれています。 #2つのフィールド。このようにして、
Person 構造体を通じて
Animal 構造体のフィールドにアクセスできます。
1 2 3 4 5 6 7 8 9 10 |
|
p という名前の
person 型のオブジェクトを定義し、
Animal 構造型を
Name# に変換します。 ## フィールドと Age
フィールドは、それぞれ "Tom"
と 18
に設定されます。 fmt.Println
関数を使用して p
オブジェクトの Name
フィールドと Age
フィールドを出力すると、実際には Animal# # にアクセスします。 #構造タイプの 2 つのフィールド
Name と
Age。
構造型埋め込みを使用して「継承」を実装する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Shape
、Circle、
Rectangle という 3 つの構造タイプを定義しました。このうち、
Shape は基本クラス、
Circle と
Rectangle は、
Shape 構造型を埋め込むことで「継承」を実装する派生クラスです。 。
Shape 構造体タイプの埋め込みを使用すると、
Circle および
Rectangle 構造体タイプには、
Shape 構造体タイプのメンバー変数とメソッドが含まれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
この例では、
Circle および Rectangle 型の 2 つのオブジェクトを構築し、それぞれのプロパティを設定しました。次に、
Draw() メソッドを呼び出して、これら 2 つのグラフィックを描画し、その面積を計算しました。
上記の例では、
Circle
Rectangle の
Draw() メソッドを呼び出しており、実際には継承を呼び出していることに注意してください。
Shape の
Draw() メソッド。これは、
Circle と
Rectangle 構造型の両方が
Shape 構造型を埋め込み、そのメソッドを継承しているためです。
構造型の埋め込みを使用してデコレータ パターンを実装する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
EmailSender
、SmsSender、および
LoggingSender という 3 つの構造タイプを定義しました。
EmailSender および
SmsSender 構造タイプは、
Sender インターフェイスの
Send() メソッドを実装します。これら 2 つのタイプのインスタンスが
Send() メソッドを呼び出すと、「電子メールが送信中です...」および「SMS が送信中です...」という情報がそれぞれ出力されます。
LoggingSender
Sender インターフェイスが埋め込まれ、
Send() メソッドがオーバーロードされます。
LoggingSender構造体タイプの
Send() メソッドは、「Logging...」を出力するステートメントを追加し、最後に埋め込まれた
Sender インターフェイスを呼び出します。 ##Send()
メソッドを使用して、特定の送信操作を完了します。このようにして、単純なデコレータ パターンが実装され、メッセージ送信時にログ機能を追加できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>func main() {
emailSender := &EmailSender{}
smsSender := &SmsSender{}
loggingEmailSender := &LoggingSender{Sender: emailSender}
loggingSmsSender := &LoggingSender{Sender: smsSender}
loggingEmailSender.Send("Hello, world!")
loggingSmsSender.Send("Hello, Golang!")
}</pre><div class="contentsignin">ログイン後にコピー</div></div><p>在这个例子中,我们创建了一个<code>EmailSender
类型和一个SmsSender
类型的实例,并且利用LoggingSender
类型来装饰它们。我们可以调用装饰后的实例的Send()
方法来发送消息,并且会在输出中看到"Logging..."的信息。
结语
本文介绍了Golang中结构体类型嵌入的应用技巧,并以几个简单的实例来说明如何利用嵌入类型实现代码重用、"继承"和装饰器模式等功能。当然,在实际的开发中,结构体类型嵌入还有很多其他的应用场景,需要根据实际需求进行灵活运用。
以上がGolang関数に構造体型の応用スキルを埋め込むの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Go ではファイルを安全に読み書きすることが重要です。ガイドラインには以下が含まれます。 ファイル権限の確認 遅延を使用してファイルを閉じる ファイル パスの検証 コンテキスト タイムアウトの使用 これらのガイドラインに従うことで、データのセキュリティとアプリケーションの堅牢性が確保されます。

Go データベース接続の接続プーリングを構成するにはどうすればよいですか?データベース接続を作成するには、database/sql パッケージの DB タイプを使用します。同時接続の最大数を制御するには、MaxOpenConns を設定します。アイドル状態の接続の最大数を設定するには、ConnMaxLifetime を設定します。

Go フレームワークは、その高いパフォーマンスと同時実行性の利点で際立っていますが、比較的新しい、開発者エコシステムが小さい、一部の機能が欠けているなどの欠点もあります。さらに、急速な変化と学習曲線はフレームワークごとに異なる場合があります。 Gin フレームワークは、効率的なルーティング、組み込みの JSON サポート、強力なエラー処理機能により、RESTful API を構築するための一般的な選択肢です。

ベスト プラクティス: 明確に定義されたエラー タイプ (エラー パッケージ) を使用してカスタム エラーを作成する 詳細を提供する エラーを適切にログに記録する エラーを正しく伝播し、非表示または抑制しないようにする コンテキストを追加するために必要に応じてエラーをラップする

GoLang フレームワークと Go フレームワークの違いは、内部アーキテクチャと外部機能に反映されています。 GoLang フレームワークは Go 標準ライブラリに基づいてその機能を拡張していますが、Go フレームワークは特定の目的を達成するための独立したライブラリで構成されています。 GoLang フレームワークはより柔軟であり、Go フレームワークは使いやすいです。 GoLang フレームワークはパフォーマンスの点でわずかに優れており、Go フレームワークはよりスケーラブルです。ケース: gin-gonic (Go フレームワーク) は REST API の構築に使用され、Echo (GoLang フレームワーク) は Web アプリケーションの構築に使用されます。

Go フレームワークの依存関係管理における一般的な問題と解決策: 依存関係の競合: 依存関係管理ツールを使用し、許容されるバージョン範囲を指定し、依存関係の競合を確認します。ベンダー ロックイン: コードの重複、GoModulesV2 ファイル ロック、またはベンダー ディレクトリの定期的なクリーニングによって解決されます。セキュリティの脆弱性: セキュリティ監査ツールを使用し、信頼できるプロバイダーを選択し、セキュリティ情報を監視し、依存関係を最新の状態に保ちます。

Go フレームワーク開発における一般的な課題とその解決策は次のとおりです。 エラー処理: 管理にはエラー パッケージを使用し、エラーを一元的に処理するにはミドルウェアを使用します。認証と認可: サードパーティのライブラリを統合し、資格情報を確認するためのカスタム ミドルウェアを作成します。同時処理: ゴルーチン、ミューテックス、チャネルを使用してリソース アクセスを制御します。単体テスト: 分離のために getest パッケージ、モック、スタブを使用し、十分性を確保するためにコード カバレッジ ツールを使用します。デプロイメントとモニタリング: Docker コンテナを使用してデプロイメントをパッケージ化し、データのバックアップをセットアップし、ログ記録およびモニタリング ツールでパフォーマンスとエラーを追跡します。

JSON データは、gjson ライブラリまたは json.Unmarshal 関数を使用して MySQL データベースに保存できます。 gjson ライブラリは、JSON フィールドを解析するための便利なメソッドを提供します。json.Unmarshal 関数には、JSON データをアンマーシャリングするためのターゲット型ポインターが必要です。どちらの方法でも、SQL ステートメントを準備し、データをデータベースに永続化するために挿入操作を実行する必要があります。
