ログイン

えっ?Go言語の基本機能だけでAPIサーバが作れるの!?

 2021.9.14 ゴリラーブログ ブログ 寿司ゴリラー木村

 

えっ?Go言語の基本機能だけでAPIサーバが作れるの!?

 

結論:作れます。

ご視聴ありがとうございました。

高評価とチャンネル評価登録よろしくお願いします。

https://www.youtube.com/channel/UCmP-PKle3oQ5rxGenak8n1A

はい。最近Youtubeで時間を消費するのを減らしたい寿司ゴリラー木村です。

 

今回はGo言語だけで簡素なWebサーバを作れるというお話です。

偉大なWebサーバとしてApacheやNginxも存在しますが、

Go言語単体でWebサーバを構成することも大きなメリットがあるので紹介します。

 

そもそもWebサーバとは

 

Webシステムの基本3要素とは、Webサーバ、アプリケーションサーバ、DBサーバの3要素で構成されます。

その1つであるWebサーバはシステムを構成する上で外せない役割です。

Webサーバの役割とは、クライアントから来たリクエストに対してレスポンスを返すことにあります。

そしてWebと名の付く通り、通常通信はHTTPで行われます。

つまりざっくりと言うなら、特定ポート(80番)へ到達したHTTPリクエストに対して正当な返答(HTTPレスポンス)を返す機能を持ったアプリケーションのことをWebサーバと呼ぶわけです。

 

 

Go言語におけるWebサーバの実装

 

HTTPもプロトコル(通信規格)なので厳格なルールがあります。

プロトコルが決まっているということは、

ポートに対して届いたデータをプロトコルに沿って解読(デコード)すれば単なるデータや変数として扱えます。

そうなるとコード内で変数を宣言することと、

HTTP通信で届いたリクエストを処理することに大きな差はありません。

Go言語の標準ライブラリには、

HTTP規格に沿ったポートの待ち受けと受け取ったデータをHTTPに沿ってデコードする処理がいい感じにパッケージ化されているので、複雑な処理を書かずにWebサーバを作ることができます。

 

【ソースコード】

これだけです。本当にこれだけです。

使用しているのはGoの標準ライブラリである。fmtとnet/httpだけです。

main関数内でハンドラ(httpリクエストを受ける関数)を宣言し、http.ListemAndServeでポートを指定して待ち受けるだけす。

 

httpのデコードなどはライブラリがいい感じにやってくれるので、httpレスポンスやリクエスト内容を取り出したり受け取るURIを変更したりするのも簡単にできます。

 

ここで「いい感じにしてくれる」というのはいい加減なのではなく、

処理をプログラマに意識させることなく内部で簡易化してくれるという意味です。

 

Go言語でWebサーバを作るメリット(感想)

 

これが言いたかった!

以前の記事でGo言語のメリットを上げましたがWebサーバを作る際にも同じことが言えます。

Go言語単体でwebサーバをビルドすることでWebサーバが小さな実行ファイル1つに集約されます。

それを配布すればどのようなサーバでもお手製のWebサーバを構築できるわけです。

Goのクロスコンパイルも併せて様々な環境で簡単に実行できるWebサーバを構築できることは、APIやマイクロサービスの構築で大きなメリットとなります。

 

実際にMGでもGo言語を使ったAPIの開発を行っておりGo言語に興味のある方の参考になれば幸いです。

 

そろそろGo言語シリーズのネタも尽きてきたので、新しいネタを探してきます。

ありがとうございました。

© 2021 Mountain Gorilla Co., Ltd. 

プライバシーポリシー

%d人のブロガーが「いいね」をつけました。