<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gin on Go言語用ポストイット</title><link>https://go.genzouw.com/category/gin/</link><description>Recent content in Gin on Go言語用ポストイット</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Fri, 07 Apr 2023 07:24:44 +0900</lastBuildDate><atom:link href="https://go.genzouw.com/category/gin/index.xml" rel="self" type="application/rss+xml"/><item><title>Go 言語で使える Web フレームワーク "Gin" を始める</title><link>https://go.genzouw.com/2023/03/30/post-332/</link><pubDate>Thu, 30 Mar 2023 08:30:56 +0900</pubDate><guid>https://go.genzouw.com/2023/03/30/post-332/</guid><description>&lt;h2 id="gin-とは"&gt;Gin とは？&lt;/h2&gt;&#10;&lt;p&gt;Go 言語で使える Http Web フレームワーク。&lt;/p&gt;&#10;&lt;p&gt;&amp;ldquo;Martini&amp;rdquo; のような API が特徴ですが、 &lt;strong&gt;Martini&lt;/strong&gt; の 40 倍以上の速さがあります。&lt;/p&gt;&#10;&lt;p&gt;とにかく速度が要求されるのであれば、Gin がおすすめです。&lt;/p&gt;&#10;&lt;h2 id="特徴"&gt;特徴&lt;/h2&gt;&#10;&lt;h3 id="速い"&gt;速い&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Radix Tree に基づいたルーティング機構&lt;/li&gt;&#10;&lt;li&gt;メモリ消費量が少ない&lt;/li&gt;&#10;&lt;li&gt;リフレクションを使わない&lt;/li&gt;&#10;&lt;li&gt;API 性能が予測しやすい&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="ミドルウェア"&gt;ミドルウェア&lt;/h3&gt;&#10;&lt;p&gt;クライアントからのリクエストは、ミドルウェアのチェイン ( フィルタ ) を多段的に経由して、最終的にアクションによって処理されます。&lt;/p&gt;&#10;&lt;p&gt;ミドルウェアには以下のようなものがあります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ロギング&lt;/li&gt;&#10;&lt;li&gt;認証・認可&lt;/li&gt;&#10;&lt;li&gt;GZIP による圧縮&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="クラッシュフリー"&gt;クラッシュフリー&lt;/h3&gt;&#10;&lt;p&gt;Gin は Http リクエストに対する処理中に発生した &lt;strong&gt;panic&lt;/strong&gt; を捉えて、自動的に復旧します。&lt;/p&gt;&#10;&lt;p&gt;サーバーは特定のアクションの処理失敗によってダウンするようなことなく稼働し続けます。&lt;/p&gt;&#10;&lt;p&gt;例えば、 &lt;strong&gt;panic&lt;/strong&gt; 発生を &lt;strong&gt;Sentry&lt;/strong&gt; のようなサービスに通知できます。&lt;/p&gt;&#10;&lt;h3 id="json-検証"&gt;JSON 検証&lt;/h3&gt;&#10;&lt;p&gt;Gin はリクエストとして受け取った JSON のフォーマットが正しいかを検証してくれます。&lt;/p&gt;&#10;&lt;p&gt;フォーマットだけでなく、JSON 内の必須属性の値がセットされているかといったこともチェック可能です。&lt;/p&gt;&#10;&lt;h3 id="ルーティンググループ"&gt;ルーティンググループ&lt;/h3&gt;&#10;&lt;p&gt;ルーティングをグルーピングして管理できます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;認証必須のパス&lt;/strong&gt; と &lt;strong&gt;認証不要なパス&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;API v1 バージョンのパス&lt;/strong&gt; と &lt;strong&gt;API v2 バージョンのパス&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;グルーピングしたルーティングパスの階層に限界はなく、性能影響もありません。&lt;/p&gt;</description></item></channel></rss>