Go 言語は、そのシンプルさと効率性により開発者に好まれています。 Go プロジェクトでデザイン パターンを使用すると、アプリケーションのスケーラビリティと保守性が大幅に向上します。この記事では、コード例と実用的なアプリケーション シナリオを使用して、いくつかの一般的な Go 言語の設計パターンを検討します。
私の Go 言語学習の旅と GoFr フレームワーク
上級コンピューターサイエンスとエンジニアリングを専攻していた私の Go 言語学習の旅は、効率的な Web アプリケーションを構築するためのオープンソース フレームワークである GoFr フレームワークにコードを貢献することから始まりました。実際の開発に参加し、ベスト プラクティスを学びながら、新しい言語を学ぶという、刺激的な挑戦でした。
GoFr フレームワークのおかげで、Go 言語のいくつかの設計パターンとベスト プラクティスを知ることができ、これらの経験が、簡潔でスケーラブルなコードの書き方を形作りました。この記事では、これらの洞察が私の開発スキルを大幅に向上させてくれたので、皆さんと共有できることを嬉しく思います。
1. シングルトンモード (クリエイティブモード)
シングルトン パターンは、クラスにインスタンスが 1 つだけ存在することを保証し、グローバル アクセス ポイントを提供します。これは、構成やデータベース接続などの共有リソースを管理する場合に役立ちます。
例:
package main import ( "fmt" "sync" ) type Singleton struct{} var ( instance *Singleton once sync.Once ) func GetInstance() *Singleton { once.Do(func() { instance = &Singleton{} }) return instance } func main() { obj1 := GetInstance() obj2 := GetInstance() fmt.Println(obj1 == obj2) // true }
2. アダプターパターン (構造パターン)
アダプター パターンは、互換性のない 2 つのインターフェイス間のブリッジとして機能します。このパターンを使用すると、既存のクラスをさまざまなインターフェイスで使用できます。
例:
package main import "fmt" type LegacyPrinter struct{} func (l *LegacyPrinter) Print(s string) { fmt.Println("Legacy printer output:", s) } type ModernPrinter interface { PrintMessage(s string) } type PrinterAdapter struct { legacyPrinter *LegacyPrinter } func (p *PrinterAdapter) PrintMessage(s string) { p.legacyPrinter.Print(s) } func main() { legacy := &LegacyPrinter{} adapter := &PrinterAdapter{legacyPrinter: legacy} adapter.PrintMessage("Hello from adapter!") }
3. 観察者パターン (行動パターン)
オブザーバー パターンはオブジェクト間の依存関係を定義するため、オブジェクトの状態が変化すると、それに依存するすべてのオブジェクトに通知されます。
例:
package main import "fmt" type Observer interface { Update(string) } type Subject struct { observers []Observer } func (s *Subject) Attach(o Observer) { s.observers = append(s.observers, o) } func (s *Subject) Notify(msg string) { for _, o := range s.observers { o.Update(msg) } } type ConcreteObserver struct { name string } func (c *ConcreteObserver) Update(msg string) { fmt.Printf("%s received message: %s\n", c.name, msg) } func main() { subject := &Subject{} observer1 := &ConcreteObserver{name: "Observer1"} observer2 := &ConcreteObserver{name: "Observer2"} subject.Attach(observer1) subject.Attach(observer2) subject.Notify("Hello, Observers!") }
オプションモード
オプション モードは、Go 言語構造を構成する柔軟な方法であり、よりシンプルで保守しやすいコードを作成できます。一般的な方法は 2 つあります:
1. 機能オプション
関数オプションは、関数を使用して構造体のプロパティを変更します。
例:
package main import "fmt" type Server struct { Host string Port int } func NewServer(opts ...func(*Server)) *Server { server := &Server{ Host: "localhost", Port: 8080, } for _, opt := range opts { opt(server) } return server } func WithHost(host string) func(*Server) { return func(s *Server) { s.Host = host } } func WithPort(port int) func(*Server) { return func(s *Server) { s.Port = port } } func main() { server := NewServer(WithHost("127.0.0.1"), WithPort(9090)) fmt.Printf("Server: %+v\n", server) }
2. オプションのビルダーパターン
ビルダー パターンを使用して、複数のオプションのパラメーターを含む構造を構成することもできます。
例:
package main import "fmt" type Server struct { Host string Port int } type ServerBuilder struct { server Server } func (b *ServerBuilder) SetHost(host string) *ServerBuilder { b.server.Host = host return b } func (b *ServerBuilder) SetPort(port int) *ServerBuilder { b.server.Port = port return b } func (b *ServerBuilder) Build() Server { return b.server } func main() { builder := &ServerBuilder{} server := builder.SetHost("127.0.0.1").SetPort(9090).Build() fmt.Printf("Server: %+v\n", server) }
マスターデザインパターン
デザインパターンをマスターする能力を向上させる最善の方法は、実際に応用することです。週末のプロジェクトやオープンソース プロジェクトへの参加により、学習が促進されます。私が参加できるプロジェクトの 1 つは GoFr です。ここでは、現実世界の問題に取り組むことで Go 言語のスキルを向上させる機会があります。
提案されたプロジェクト
- GoFr: GitHub リポジトリ
- さまざまなパターンを使用して単純な REST API を構築します。
- Go 言語でさまざまなデザイン パターンを実装するライブラリを作成します。
これらのプロジェクトで練習することで、実践的な経験を積み、デザイン パターンが現実世界の問題をどのように解決するかについてより深い理解を得ることができます。
以上がGolang のデザイン パターン: 包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

GO言語で文字列パッケージをマスターすると、テキスト処理機能と開発効率が向上します。 1)コンテナ機能を使用してサブストリングを確認し、2)インデックス関数を使用してサブストリング位置を見つけ、3)関数を効率的にスプライスストリングスライス、4)機能を置き換えてサブストリングを置き換えます。空の文字列や大きな文字列操作のパフォーマンスの問題をチェックしないなど、一般的なエラーを避けるように注意してください。

文字列の操作を簡素化し、コードをより明確かつ効率的にすることができるため、GOの文字列パッケージを気にする必要があります。 1)文字列を使用して、弦を効率的にスプライスするために参加します。 2)文字列を使用して、空白の文字で文字列を分割します。 3)文字列を介してサブストリング位置を見つけます。Indexと文字列lastindex; 4)文字列を使用して、文字列を置き換える。 5)文字列を使用して、ビルダーを効率的にスプライスします。 6)予期しない結果を避けるために、常に入力を確認してください。

theStringspackageIngoisESSENTINEFOREFFSTRINGMANIPULATION.1)ITOFFERSSSIMPLEYETPOWERFULFUNCTIONS FORTOSSCHECKINGSUBSTRINGSNINGSTRINGS.2)ITHANDLESUNICODEWELL、ITHANDLESUNICODEWELL

whendeciding botedego'sbytespackageandstringspackage、usebytes.bufferbinarydataandstrings.builderforstringoperations.1)usebytes.bufferforkithbyteslices、binarydata、appendingdatatypes、およびwritioio.writioio.writioio.writioio.writioio.

Goの文字列パッケージは、さまざまな文字列操作機能を提供します。 1)文字列を使用して、サブストリングを確認します。 2)文字列を使用して、ストリングをサブストリングスライスに分割します。 3)文字列を通して文字列をマージします。 4)文字列または文字列を使用して、文字列の最初と端でブランクまたは指定された文字を削除します。 5)指定されたすべてのサブストリングを文字列に置き換えます。ReplaceAll。 6)文字列を使用して、hasprefixまたは文字列hassuffixを使用して、文字列の接頭辞または接尾辞を確認します。

GO言語文字列パッケージを使用すると、コードの品質が向上します。 1)文字列を使用して()join()を使用して、パフォーマンスのオーバーヘッドを避けるために、文字列アレイをエレガントに接続します。 2)strings.split()とstrings.contains()を組み合わせて、テキストを処理し、ケースの感度の問題に注意を払います。 3)文字列の乱用を避け、replace()を回避し、多数の置換に正規表現を使用することを検討します。 4)文字列を使用して、ビルダーを使用して、頻繁にスプライシング文字列の性能を向上させます。

GoのBYTESパッケージは、バイトスライスを処理するためのさまざまな実用的な機能を提供します。 1.bites.containsは、バイトスライスに特定のシーケンスが含まれているかどうかを確認するために使用されます。 2.bites.splitは、バイトスライスをスモールピースに分割するために使用されます。 3.bites.joinは、複数のバイトスライスを1つに連結するために使用されます。 4.bites.trimspaceは、バイトスライスのフロントブランクとバックブランクを削除するために使用されます。 5.バイト。エクアルは、2つのバイトスライスが等しいかどうかを比較するために使用されます。 6.bytes.indexは、大規模なスライスでサブスライスの開始インデックスを見つけるために使用されます。

エンコード/binaryPackageIngoisESSENTINESTENTINESTINESTIDANDARDIZEDWAIDTOREADANDWRITEBINIRYDATA、クロスプラットフォームコンパティビティアンドハンドリングの可能性を確保することを確認します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。
