採用ナレッジの一環で、今日はGO言語について深掘り。
▼プログラミング言語の一覧はこちら
フリーランスで入る予定の企業の事業ビジョンを調べたとき、
これからは
ステークホルダーコミュニティにおいてのDAOのようなもの
を作っていきたいとあった。
これはおそらくブロックチェーンとか関係するので、
Webアプリやマイクロサービスに強みを持つGO言語というよりはPythonとかもう少し勉強しておいた方が良いかもと思ったけど、先日の記事でGOが年収ランク1位だったこともあり、順番的にGOから深掘りしてしまった![ニヤニヤ](https://stat100.ameba.jp/blog/ucs/img/char/char3/037.png)
まずは、GOからGO!。。。。。![ゲロー](https://stat100.ameba.jp/blog/ucs/img/char/char3/038.png)
GO言語
・Web、スマホアプリのバックエンド
・大規模インフラ構築
・YouTube
・メルカリ
・Docker
・並列処理やメモリの操作が得意
・Googleが開発している
・大規模でアクセスが集中するものなどを作る時にGO言語が使われる
・GOが使われる現場は複雑・大規模が多い
・高いパフォーマンスと並行処理の容易さにより、大規模なサーバーサイド開発で広く採用
・クラウドインフラストラクチャ、マイクロサービス、分散システムの構築に適しており、これらの分野での需要の高さが反映
<Webアプリ開発向き>
フレームワーク |
フレームワーク特徴 |
Gin(ジン)
![Go 言語用 Web フレームワーク “Gin” でログイン認証を実装 | Go言語用ポストイット](https://go.genzouw.com/wp-content/uploads/2023/03/color.png) |
・軽量かつ高速
・豊富なミドルウェアのサポートを提供、開発プロセスを効率化
・例外が発生した場合でも、クラッシュせずにエラーを管理する能力も持っている
・信頼性の高いアプリケーションを構築するのに役立つ |
echo(エコー)
![Go】echoを使ってAPIサーバーを3分で構築してみる](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT-FHvvnBTyk08qxK6kT9XzyFLt6wvR3ro77WGRod-y&s) |
・シンプルさと拡張性を兼ね備えるフレームワークとして注目
・パフォーマンスが高く、高負荷なアプリケーションの開発にも対応可能
・洗練されたデザインと豊富な機能セットを持つ
・使いやすく習得しやすい
・シンプルで直感的なAPIを提供し、開発者が迅速にアプリケーションを構築できるようになっている |
Revel(レベル)
![Goのフレームワーク”Revel”を触ってみた | Wedding Park CREATORS Blog](https://engineers.weddingpark.co.jp/wp-content/uploads/2017/09/revel.jpeg) |
・年に複数回の早いペースでバージョンアップ
・安定した信頼性あるフレームワークと評価
・プログラムをModel(モデル)、View(ビュー)、Controller(コントローラー)の3つの役割に分けて管理するMVCモデルを採用
・機能を分割して開発を進めることが可能
・豊富な機能を備えるフルスタックなフレームワーク
・コードを変更すると自動的にコンパイルを行う仕様を採用
・大規模で高負荷なWebアプリケーションを構築する際に、特に効果的なフレームワーク |
aero(エアロ)
![](https://stat.ameba.jp/user_images/20240418/15/kubota627/ff/b4/j/o0109010315427432842.jpg?caw=800) |
・Go言語のWebアプリケーション開発を簡素化するために設計された新興のフレームワーク
・高度な自動化
・HTTP/2を採用することでモバイルネットワークでも高速な動作を実現
・コードがシンプル
・日本語・英語ともに公開情報が少ない
・学習コストが高い |
Iris(イリス)
![Iris(Go フレームワーク)の使い方を最速でマスターする](https://res.cloudinary.com/zenn/image/fetch/s--R6T8RQbU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_1200/https://storage.googleapis.com/zenn-user-upload/deployed-images/d88d34adf171d6db4b016eb1.png%3Fsha%3D4ae0b7e0686e33fda5254690046a32a2aa1b2d9e) |
・実行速度と効率性を重視するプロジェクトで選ばれるフレームワーク
・定期的なバージョンアップと活発なコミュニティサポートあり
・最新のWeb開発トレンドにあわせて常に進化
・クロスプラットフォームになっているためデバイスを選ばない
・Webアプリケーションやスマートフォンアプリなど、さまざまな開発でも高速な処理を実現
・非常に軽量かつ効率的なルーティングエンジンを搭載
・高負荷なアプリケーションにも対応
・活発なコミュニティサポートの他、ドキュメント類が充実
・学習コストをかけずに導入可能 |
Beego(ビーゴ)
![](https://stat.ameba.jp/user_images/20240418/15/kubota627/0c/a1/j/o0083012215427434189.jpg?caw=800) |
・2012年に初リリース、長い間コミュニティに支持
・歴史的な背景から、安定性と信頼性が確保されている
・完全なスタックを提供
・ルーティング、モデル、ビュー、コントローラー、ミドルウェアなどが含まれ、開発者が全ての要素を一貫して管理できる
・大規模開発に適したフレームワーク
・ORM(Object-Relational Mapping)と連携
・データベースから取得した情報をテンプレートエンジンに簡単に渡すことが可能 |
Goji(ゴジ)
![Goji | Made With GoLang](https://madewithgolang.com/assets/images/posts/goji.png) |
・軽量で高速なフレームワーク
・ミニマリストなアプローチ
・必要なものだけを提供して、過剰な抽象化やコード冗長性を排除
・開発者はシンプルにコードが書け、容易にアプリケーションのメンテナンスができる
・高性能なHTTPルーティングを提供
・並行リクエスト処理をサポート
・高負荷な状況でもアプリケーションのパフォーマンスを維持できる |
Mango(マンゴー)
![](https://www.igroupjapan.com/wp-content/uploads/2021/11/mango-languages-logo-300x76.png) |
・豊富なミドルウェアとプラグインのサポート
・セッション管理、認証、キャッシュなどの一般的な機能を容易に組み込むことができる
・開発者が簡単にカスタマイズできる
・高度なルーティング機能を備えており、RESTful APIの開発にも適している
・データベースアクセスに関しても豊富な選択肢を提供
・開発者は使用したいデータベースと自在に連携できる |
<マイクロサービス開発向き>
フレームワーク |
フレームワーク特徴 |
Micro(マイクロ) |
・分散システムを構築する際に必要なツールと機能を提供
・マイクロサービスの開発プロセスを簡素化
・初回リリース以降も積極的に開発が進行
・プラグインで必要な機能を追加し既存の機能を拡張するプラグインアーキテクチャ採用
・マイクロサービス間の通信を効率化する仕組みを保有
・リモートプロシージャコール(RPC)をサポート
・分散システム内の異なるサービス間での通信を簡単に行える |
kit(キット) |
・マイクロサービスアーキテクチャの開発に特化したGo言語のフレームワーク
・ライブラリ間のすき間を埋めるためのさまざまなツールを提供
・MVCモデルではなく、独自の構造を採用
・トランスポート層・エンドポイント層・サービス層からなる3つの層で構成 |
こう見ると、言語も大切だけど、
いかにフレームワークを使いこなすかの方が重要そうな気がする
![電球](https://stat100.ameba.jp/blog/ucs/img/char/char4/673.png)
そもそもGO言語が使える時点で超上級者だと思うので、
自ずとパイは少なくなるんだろうな
![魂が抜ける](https://stat100.ameba.jp/blog/ucs/img/char/char4/627.png)