Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

go言語 メリットとデメリット

updated on 2020-11-07

概要

go言語のメリットは、シンプルかつ高パフォーマンスで、採用しやすいこと。デメリットは、比較的情報が少ない事と、Go特有の言語設計であるため、人によっては好みに合わないこともあるという事。

Goのメリット・デメリット



Go言語のメリット6つ



Go言語のメリット1:初心者でも理解しやすい


Go言語には、初心者でも理解しやすいというメリットがある。

Go言語はシンプルなプログラミング言語なので、文法も分かりやすいため、C言語やC#などを経験したことがない人にとっては扱いやすい言語。



Go言語のメリット2:処理の速度が速い


Go言語には、処理の速度が速いというメリットがある。

Go言語は直接機械語に変換するため、コンパイルが速い。

シンプルな言語設計で、簡易的に複数処理を同時に行うことができる。

他のプログラミング言語よりも処理を軽量かつ高速に行うことが可能。



Go言語のメリット3:豊富な標準ライブラリ


Go言語はライブラリが豊富に用意されているため、さまざまな機能を簡単に追加することが可能。

ライブラリに用意されている機能を効果的に利用することで、コード部分をより少なくシンプルに実装できる。



Go言語のメリット4:並行処理が可能


Go言語には、並行処理が可能というメリットがあります。

Go言語は並行処理が得意な言語です。goroutineやチャネルといった機能を使えば、大量のデータをCPUに負担をかけることなく処理することもできます。

そのため、これまで並行処理が苦手なPHPが利用されてきたWebサービスの開発に、Go言語が利用される機会が増えてきているようです。



Go言語のメリット5:シングルバイナリ


シングルバイナリのメリットは、1つのバイナリファイルなので、デプロイ(別サーバへの配置・実行)が容易になるというメリットがある。

サーバで実行環境を作る場合、モジュールをインストールしたり、ライブラリをリンクしたりコンパイルしたり、実行環境整備に手間がかかりますが、シングルバイナリの場合、それらをすべてインポート済み、リンク済みのユニットとして一つのファイルにまとめてしまい、デプロイ、あるいはインストールや実行するだけでこれらの機能のモノが作成できる


Go言語のメリット6:クロスコンパイル


クロスコンパイルのメリットは、開発者のOSとは違う環境でも、プログラムの実行が可能になるというメリットがある。

クロスコンパイルは、1つのGoのプログラムから、複数のOS向け(linux,mac,Windows)のバイナリを作成できることを指します



Go言語のデメリット4つ


Go言語のデメリット1:情報量が少ない


Go言語は新しい言語のため、情報量が少ないというデメリットがある。

Go言語は、Googleが開発したプログラミング言語で、2009年11月に最初のバージョンをオープンソースで公開された。

他の言語と比較しても情報量が少ない点はデメリットでしょう。特にこれから勉強しようと考えている方にとって、基本的な情報量の少なさがデメリットになるかもしれない。



Go言語のデメリット2:コードの継承がない


Go言語には、コードの継承がないというデメリットがあります。

オブジェクト指向のプログラミングでは、当たり前とされる継承がGo言語にはない。

そのため、オブジェクト指向の考え方でプログラミングをしようと思うと、思っていたようなプログラミングができない点はデメリットと言える。


Go言語のデメリット3:Genericsがない


Go言語には、Genericsが存在しないというデメリットがあります。

Genericsとはプログラミング言語の機能の1つで、同じプログラムコードでさまざまなデータ型のデータを処理できるものです。Go言語はメモリの管理機能として、メモリの中身の値の型
を明らかにしなければいけないルールがあります。

そのため、Go言語ではGenericsが使えないというデメリットがあります。


Go言語のデメリット4:例外がない(エラーは値として処理)


goには例外がない。Goのポリシーは例外は極力使わず、エラーを値として扱うものである。

panic, recoverで例外と同じようなことはできますが、Javaの例外のように気軽に使ってはなりません。

例外で返されたエラーを try {...} catch (Exception e) {...} みたいに処理しないといけないのは無意味に複雑なコードを作ってしまうため、Goでは別のアプローチとして、正常な値と、エラーで、複数の値を返す仕組みを採用した。

(例)
f, err := os.Open("filename.ext")
if err != nil {
    log.Fatal(err)
}
// do something with the open *File f


Go言語使用の検討

静的型付け、文法がシンプルでありパフォーマンスが良いため、チーム開発に向いています。

オブジェクト指向言語に慣れているとGoのデメリットを嫌う傾向もあるので、メリットデメリットを知った上で、採用を検討してみてください。