今となってはgolangを使ってアプリを開発している企業がかなり多くなってきました。以前までは規模の小さなサービスでしか使われていませんでしが、今は大規模のサービスでも用いられていることも少なくありません。
そこで今回はgolangでwebアプリを開発するにあたって、言われているメリットとデメリットをそれぞれ解説していきます。
golangのメリット
golangを使って開発していくにあたりメリットは6つあります。
初心者でも使いやすく学習コストが低い
golangの大きなメリットとして初心者でも理解しやすく使いやすいというのがあります。
無駄なものを削ぎ落したことで記述が非常にシンプルです。言語仕様もそこまで多くないため、今後プログラミング言語を習得していきたいという方におすすめの言語です。
特にC言語やC#を使ったことがあるという方は特に理解が進みやすい言語ともなっています。
理解するのに時間がかかる言語はコーディングしながら習得するのも中々難しいので、理解しやすいのは嬉しいですよね。
処理速度が速い
golangは処理速度が速いことも最近採用される要因になっています。
処理速度を速くできる要因としては、コンパイルの仕組みにあります。コンパイルとはプログラムのコードを機械語に変換する処理のことをいいますが、golangの場合はコードがシンプルに作られているのでコンパイルを速くすることができます。
他のプログラム言語よりも処理速度が速く、作業効率も高いことから大きなメリットとなっています。
並行処理が可能
複雑な処理には並行処理が欠かせませんが、golangは並行処理が得意というメリットがあります。
例えば、goroutineやチャネルという機能を使うことで、大量のデータを速く正確に処理することができます。効率的に大量データをさばくことができるのでCPUに負担をかけないということもポイントです。
性能を求められてもしっかりこなせるのがgolangなのです。
標準ライブラリが豊富
標準ライブラリとは、複数のプログラムを利用できる状態でまとまっているもので、このライブラリを活用することで実装者が書くコードの量が格段に減ります。
標準ライブラリの種類が多いということは、状況に応じたライブラリが揃っていることになり、作業の効率化にも繋がります。
効率よく作業していくのであればライブラリの活用は必要不可欠です。
シングルバイナリ
アプリを作るにあたり、サーバーへのデプロイ作業が必要となります。デプロイとはサーバーへコードをまとめたものを配置することです。
golangはアプリの中で使うモジュールやライブラリは一つにまとまっているシングルバイナリのため、実行環境ごとにモジュールのインストールやライブラリのリンク作業などは不要になります。
実行も簡単であるのは非常に大きなメリットです。
クロスコンパイル
プログラムの実行には複数のOSを考慮する必要があります。開発者の実行環境はWindowsでも、アプリのユーザーはmacやlinuxかもしれません。
golangはクロスコンパイルのため、開発者のOSとは異なる環境でもプログラムの実行が可能になります。
golangのデメリット
デメリットは4つほどあります。
まだ情報量が少ない
golangは2009年11月にオープンソースで公開されたばかりの言語ということもあり、まだまだ情報量が多くありません。
特に日本語の解説記事は少なく、深くまで調べようとすると基本的には英語の記事を読まなくてはなりません。英語アレルギーの方は少し苦労するかもしれません。
継承ができない
Java等のオブジェクト指向では継承を使うことで同じ処理を行うコードは省くことができますが、golangの場合はその継承がないため一から作らなければなりません。
これからプログラミング言語を習得していきたいという方はそんなに影響しないですが、プログラミング経験者は不便に感じるかもしれません。
Genericsがない
Genericsとは同じコードで様々なデータ型のデータを処理できる機能です。
Genericsがないということは、golangではメモリの管理機能として、メモリの中身の値の方を明確にしなければなりません。Genericsがあるプログラミング言語に比べると作業効率が若干下がってしまうことはgolangのデメリットとなります。
ただ、メモリの値の方を明確にするのは安全性が高くなるという考え方をすることもできます。
例外処理がない
他のプログラミング言語経験者で最も違和感を感じるのが、golangには例外処理がないことかもしれません。
例えばJavaではtry catch構文を使うことでエラーが発生しても例外をキャッチすることができますが、golangでは処理の中でエラーを返して、エラーが返ったときの処理を記述しなければなりません。
if err := json.Unmarshal(data, &jsonMap); err != nil {
return nil, err
}
golangを効率よく理解する方法については今後執筆していく予定です。
golangをもっと詳しくなりたい方に
golang学習のために筆者が実際に受講したUdemy教材をまとめています。
golang学習のために筆者が実際に読んでおすすめしたい本をまとめています。