Fuego を使用して Go API を構築した私の経験
数年の経験を持つ Go 開発者として、私はさまざまな Web フレームワークを検討してきました。 私の旅には、標準ライブラリ、Gin、Fiber が含まれていました。 それぞれに利点がありますが、検証、シリアル化、ドキュメント化のために複数のライブラリを統合するために、より多くの構造が必要になったり、過度の時間が費やされたりすることがよくありました。 そこでフエゴが試合を変えた。
当初、Fuego は単なるフレームワークのように思えました。しかし、最新の Go 機能、特にジェネリックスを使用して OpenAPI 仕様をコードから直接自動的に生成することに、私は興味をそそられました。小規模な社内プロジェクトでテストすることにしました。これが私の正直な説明です。
第一印象
フエゴの単純さはすぐに分かりました。 基本的なサーバーのセットアップにはほんの数分しかかかりませんでした:
package main import "github.com/go-fuego/fuego" func main() { s := fuego.NewServer() fuego.Get(s, "/", func(c fuego.ContextNoBody) (string, error) { return "Hello, World!", nil }) s.Run() }
その親しみやすさは印象的でした。Gin に似ていますが、OpenAPI サポートが組み込まれています。
実際の例
「Hello World」の例は、現実世界の複雑さを反映していません。私のアプリケーションでは、JSON データの処理、検証、および型指定された応答が必要でした。 他のフレームワークでは、カスタム JSON デコード、エラー処理、ミドルウェア統合が必要です。 Fuego は、型付きルート ハンドラーを使用してこれを大幅に合理化しました。
簡略化されたルート ハンドラーは次のとおりです。
type UserInput struct { Name string `json:"name" validate:"required"` } type UserOutput struct { Message string `json:"message"` } func main() { s := fuego.NewServer() fuego.Post(s, "/user", handleUser) s.Run() } func handleUser(c fuego.ContextWithBody[UserInput]) (UserOutput, error) { in, err := c.Body() if err != nil { return UserOutput{}, err } return UserOutput{Message: "Hello, " + in.Name}, nil }
主な改善点:
-
型付きハンドラー:
fuego.ContextWithBody[UserInput]
は、JSON をUserInput
構造体に自動的に逆シリアル化します。 -
検証:
validate:"required"
は、Name
フィールドが存在することを確認します。 Fuego はエラーを適切に処理します。 -
応答:
UserOutput
構造体を返すと、それが自動的に JSON にシリアル化されます。
これにより、重要な定型コードが削除され、json.Unmarshal
、外部検証ライブラリ、カスタム エラー処理が不要になりました。
なぜフエゴが傑出しているのか
-
ネイティブな Go フィール:
net/http
を大量にラップするフレームワークとは異なり、Fuego は非常にネイティブな感じがします。net/http
を直接利用し、標準のミドルウェアとハンドラーのシームレスな統合を可能にします。既存の認証ミドルウェアを問題なく再利用しました。 -
OpenAPI の自動生成: 以前は、個別の YAML ファイルを管理するか、OpenAPI 仕様のコメントに依存していましたが、これは面倒でエラーが発生しやすいプロセスでした。 Fuego はルート ハンドラー タイプから仕様を自動的に生成し、ドキュメントが常に最新の状態に保たれるようにします。
-
検証とエラー処理: 統合された検証 (
go-playground/validator
を使用) は直感的で、エラー処理が簡素化されました。無効なUserInput
構造体により、RFC 標準に準拠した構造化エラー メッセージが生成されました。
データ変換
すべての受信 Name
フィールドが小文字であることを確認するために、Fuego の InTransform
メソッドを利用しました。
package main import "github.com/go-fuego/fuego" func main() { s := fuego.NewServer() fuego.Get(s, "/", func(c fuego.ContextNoBody) (string, error) { return "Hello, World!", nil }) s.Run() }
これにより、ルート ハンドラーに到達する前にデータが自動的に変換されます。
直面した課題
-
小規模なエコシステム: Jin や Echo と比較して、Fuego のユーザー ベースが小さいため、すぐに利用できるコミュニティ リソースが少なくなります。ただし、リポジトリの例とドキュメントで十分であることがわかりました。
-
限定された組み込みミドルウェア: Fuego はいくつかのミドルウェアを提供しますが、一部の古いフレームワークほど広範囲ではありません。
net/http
外部ライブラリまたはカスタムミドルウェアを使用すると互換性が許可されます。
結論
フエゴは、利便性と柔軟性の魅力的なバランスを提供します。 Go の原則に忠実でありながら、組み込みの検証、シリアル化、ドキュメント生成により API 開発を加速します。 型付き構造体を使用し、Fuego に残りの管理を任せることで、ワークフローが大幅に改善されました。
主な利点:
- 生産性の向上: コードがすっきりし、定型文が削減されます。
- 自動ドキュメント: 常に最新の OpenAPI 仕様。
-
スムーズな移行: 既存の
net/http
ハンドラーと簡単に統合できます。
最新で柔軟な Go フレームワークを探している場合、特に OpenAPI の手動メンテナンスにうんざりしている場合は、Fuego を強くお勧めします。これにより、Go のミニマリスト哲学に忠実でありながら、開発プロセスが簡素化されました。 GitHub リポジトリは、包括的な情報と有望なロードマップを提供します。私はその将来性に非常に期待しており、今後のプロジェクトでも引き続き使用していきます。
以上がFuego での経験から Go API を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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、クロスプラットフォームコンパティビティアンドハンドリングの可能性を確保することを確認します

byteSpackageingocialforforhandlingbyteslicesandbuffers、offering foreffisememorymanagementanddatamanipulation.1)Itprovidesは、バイテッツを使用して、n

テキストデータを処理するためのツールを提供し、基本的な文字列から高度な正規表現のマッチングにスプライシングするためのツールを提供するため、Goの「文字列」パッケージに注意する必要があります。 1)「文字列」パッケージは、パフォーマンスの問題を回避するために文字列をスプライスするために使用される結合関数など、効率的な文字列操作を提供します。 2)contensany関数などの高度な関数が含まれており、文字列に特定の文字セットが含まれているかどうかを確認します。 3)交換関数は、文字列のサブストリングを交換するために使用され、交換順序とケースの感度に注意を払う必要があります。 4)分割関数は、セパレーターに従って文字列を分割することができ、しばしば正規表現処理に使用されます。 5)使用するときは、パフォーマンスを考慮する必要があります。

GOでBYTESパッケージをマスターすると、コードの効率と優雅さを向上させることができます。 1)バイナーズパッケージは、バイナリデータの解析、ネットワークプロトコルの処理、およびメモリ管理に不可欠です。 2)bytes.bufferを使用して、バイトスライスを徐々に構築します。 3)BYTESパッケージは、バイトスライスの検索、交換、およびセグメント化の関数を提供します。 4)BYTES.READERタイプは、特にI/O操作でのバイトスライスのデータを読み取るのに適しています。 5)BYTESパッケージは、GoのGarbage Collectorと協力して機能し、ビッグデータ処理の効率を向上させます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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