見出し画像

golang ginフレームワークの使い方 簡単にAPIサーバーを構築する

今回はgolangのginフレームワークの使い方について解説していきます。


ginとは

ginはWebアプリケーション開発において高速かつ軽量なフレームワークです。
golangのフレームワークの中でも非常に人気があり、広く使われています。

ginの特徴やメリットについて以下の記事で詳しく解説しています。


ginの案件を探すならクラウドワークス テック

・97%がリモートのお仕事
・週4日、週3日OKのお仕事多数
・登録社数74万件業界トップクラス
・2〜4週間程度でお仕事決定
・案件提案から契約締結、勤怠管理もすべてオンライン完結
・継続率90%!一人ひとりをサポート
・参画後の評価で委託料が上がる認定パートナー制度
・簡単60秒で登録


ginのインストール

ginのインストールを行うには以下のコマンドを実施します。

go get -u github.com/gin-gonic/gin


Webサーバーの作成

以下のように実装することで、ginを使用して簡単にWebサーバーを作成することができます。

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    r := gin.Default()

    r.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "Hello, World!")
    })

    r.Run() 
}

まずはginパッケージをインポートして、main関数内にgin.Default()を呼び出して新しいginルーターのインスタンスを作成します。

r.GETメソッドを使用してHTTP GETリクエスト用のエンドポイントを定義することではウェブサーバーのルートURL(/)にマッピングします。

リクエストが来たときに実行されるハンドラ関数を提供して、gin.Contextオブジェクトを引数に取り、Hello, World!という文字列をHTTPレスポンスとして返します。
http.StatusOKはHTTPステータスコード200を表し、リクエストが成功したことを意味します。

r.Run()を呼び出すことで、デフォルトのポート8080でウェブサーバーを起動します。特定のポートで起動したい場合は、r.Run(":ポート番号")のように書きます。


ルーティング

さまざまなHTTPメソッドとパスに対応したルーティングを簡単に設定できます。グループ化されたルーティングやパスパラメータの取得も可能です。

r := gin.Default()

r.GET("/someGet", getting)

r.POST("/somePost", posting)

r.GET("/user/:name", func(c *gin.Context) {
    name := c.Param("name")
    c.String(http.StatusOK, "Hello " + name)
})

r.Run()


JSONレスポンス

RESTful APIに使用するJSONレスポンスを返す機能もあります。

r.GET("/someJson", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
})


クエリパラメータの取得

URLからクエリパラメータを取得することができます。

r.GET("/welcome", func(c *gin.Context) {
    firstName := c.DefaultQuery("firstname", "Guest")
    lastName := c.Query("lastname") 

    c.String(http.StatusOK, "Hello " + firstName + " " + lastName)
})


フォームデータの取得

POSTリクエストからフォームデータを取得します。

r.POST("/form_post", func(c *gin.Context) {
    message := c.PostForm("message")
    nick := c.DefaultPostForm("nick", "anonymous")

    c.JSON(http.StatusOK, gin.H{
        "status":  "posted",
        "message": message,
        "nick":    nick,
    })
})


ファイルアップロード

ginを使用してファイルアップロードを処理することができます。

r.POST("/upload", func(c *gin.Context) {
    file, _ := c.FormFile("file")
    c.SaveUploadedFile(file, file.Filename)
    c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))
})


ミドルウェアの使用

リクエスト処理の前後に特定のロジックを実行するミドルウェアを簡単に追加できます。

r.Use(gin.Logger())
r.Use(gin.Recovery())

r.GET("/benchmark", MyCustomMiddleware(), benchmarkEndpoint)


エラーハンドリング

エラーを適切にハンドリングし、クライアントにフィードバックを提供します。

r.GET("/someData", func(c *gin.Context) {
    if someErrorCondition {
        c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal Server Error"})
        return
    }

    c.JSON(http.StatusOK, gin.H{"data": "someData"})
})


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。

この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?