作者:Renée French
こんにちは!近年、多くのプログラミング言語の中で「稼げる言語」として人気が爆発しているのは、Googleが開発したGo言語です。
この記事では、Go言語について、Go言語でできること、実用例、メリット・デメリットなどを、簡単かつ具体的に紹介していきます。
これからGo言語を学びたいという人は、是非最後まで目を通してみてください。
それではいきましょう!目次はこちら!
目次
Go言語とは
作者:Renée French
出典:https://golang.org/doc/gopher/
Go言語とは、2009年にGoogleで開発されたコンパイラ型のプログラミング言語です。Golangとも言われますが、正式名称は「Go」です。
近年、IT(=情報技術)は驚くほどのスピードで進化していて、その結果、多くのシステムが新たに生まれ、既存のシステムはどんどん拡張されていきました。
システムの規模が大きくなるにつれて、ソースコードの複雑化、肥大化が起こり、容易に新たな機能開発やメンテナンスをするのが難しくなってきました。
そこで、GoogleのエンジニアであるRobert Griesemer氏らは、安全性、信頼性、生産性を保ったシンプルな言語の開発に取り組みました。そうして生まれたのがGo言語です。
Go言語のマスコットキャラクターは、ホリネズミのGopherです。その可愛さから、エンジニアの垣根を超えて愛されています。
作者:Renée French
出典:https://golang.org/doc/gopher/
Go言語でできることは?
そんなGo言語でできること以下にをまとめました。
Go言語でできること
・Webアプリケーション、Webサーバ
・スマートフォンアプリケーション
・CLI(コマンドラインツール)
・PaaS(Platform as a Service)
・ドローン
・ゲーム
など
Webアプリケーション、Webサーバ
Go言語を使用すれば、Webアプリケーション、Webサーバを作成することができます。
Goが公式に公開しているnet/httpパッケージは、HTTPクライアントとHTTPサーバの機能が提供されています。このパッケージを使用して、以下のようにソースを記述すると、Webアプリケーションが一瞬で完成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "fmt" "log" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":8080", nil)) } |
参考:Go言語公式ドキュメント
そして、Go言語の素晴らしい所で、これがWebサーバも兼ねているということ。通常は、ApacheやnginxなどのWebサーバがないと、作ったアプリケーションはWeb上で動作しません。
しかし、Go言語はたったの数行で、Webサーバの作成ができてしまいます。すなわち、作ったexeを起動するだけでOKということです。
また、echoやginなど、Webの作成に特化したフレームワークが豊富に存在します。これらのフレームワークを使った事例と開発記事は徐々に増えているので、Webアプリケーションを作ってみたい初心者には、かなりおすすめのプログラミング言語です。
スマートフォンアプリケーション
Go言語を使用すれば、AndroidやiPhoneで動作するスマートフォンアプリケーションを作成することができます。
Go Mobileは、スマトフォンアプリケーション作成に必要なツールを揃えたプラットフォームで、Go言語のみで記述されたネイティブアプリと、Go言語で記述したライブラリを、外部から使用できるSDKアプリの作成が可能です。
Go Mobileはスマートフォンの2大OSであるAndroid、iOSをサポートしています。そのビルド方法とデプロイ方法はこちらで公開されています。
今の時代、スマートフォンは生活必需品ですから、Go言語×スマートフォンアプリケーションの開発は、ますます需要が伸びると予想されます。
CLI(コマンドラインツール)
CLI(コマンドラインツール)とは、その名の通り、コマンドを入力して動作するプログラムのことです。よくドラマでハッカーが動かしている、あの黒い画面で動作するプログラムです。
プログラムを書かない人に馴染みはありませんが、CLIを使うと日々の繰り返し作業や、ファイル移動、ファイル名変更、ファイルバックアップなどの手作業を全て自動化できます。
また、Go言語は処理が高速なので、CLIを使用すると、かなりの業務効率化に繋がります。
Go言語対応のCLI作成パッケージも豊富で、cobra、cliなどが代表的です。
Paas(パース)
Paas(パース)とは、Platform as a Serviceの略で、アプリケーションを実行するための土台(プラットフォーム)を提供します。具体的に、Webアプリケーション開発環境の提供と、Web公開の手助けなどをしてくれます。
代表的なPaasの実例は、Amazon Web Services(AWS)、Google App Engine(GAE)、Microsoft Azureで、どれも世界中で利用されているクラウドサービスです。
なかなかPaasを自作する場面は少ないかもしれませんが、実際にPaasを作成してみた例もあるようです。
参考:
ドローンアプリケーション
Go言語で、今流行りのドローンを制御するアプリケーションを作成することができます。
中国のRyze Tech社が発売しているドローン「Tello」や、同じく中国Holy Stone Toys社の「HS200」などが、Gobotを使用すれば、好きなように動作させることができます。
また、Gobotはドローン以外にも、多くのIOT機器の制御を行うことができます。詳細はこちらを参照ください。
ゲーム
最後に、Go言語を使用すればゲームを作成することができます。
Go言語対応のゲーム開発パッケージも豊富で、2Dゲームエンジンのengo、pixelや、3DゲームエンジンのAzul3D、G3Nなどがあります。 こんにちは!近年、多くのプログラミング言語の中で「稼げる言語」として人気が爆発しているのは、Googleが開発したGo言語です。本記事では、2Dゲームエンジンのengoを使用してゲームを作成していきます。プログラミング初心者の方でも分かりやすいように、ソースコードの説明もしっかり行いたいと思います。 続きを見る
engoを使ったゲーム作成は、こちらの記事で詳しく紹介しています。是非チェックしてみてください。
おすすめ【第1回】Go言語(ゲームエンジン:engo)でゲームを作成してみた
Go言語が使用されている実例
次に、Go言語が使用されている実例を紹介します。
Go言語開発メンバーのRuss Cox氏によると、Go言語は「Youtube」及び、他Googleシステムで使用していると、コメントしています。
参考:Google's Go language turns one, wins a spot at YouTube
Chrome、Earth、Android SDKなどのダウンロードサービスを行う「dl.google.com」でもGo言語が使用されているようです。
参考:https://github.com/golang/go/wiki/GoUsers
他にも、AbemaTV、ぐるなび、Pairs、CookPad、メルカリでGo言語は使用されています。
Go言語が使用されている例
・Youtube
・dl.google.com(Chrome、Earth、Android SDK ダウンロードサーバ)
・AbemaTV
・ぐるなび
・Pairs(ペアーズ)
・CookPad(クックパッド)
・メルカリ
・Docker
など
また、パフォーマンスの利点から、Go言語に書き換えたシステムは、年々増えているようです。
参考:https://frasco.io/why-we-switched-from-python-to-go-19581e27de7c
Go言語のメリット
次にGo言語のメリット・デメリットを紹介していきます。
まず、Go言語のメリット一覧はこちらです。
Go言語のメリット
・処理速度が早い
・並列処理が得意
・クロスコンパイルが可能
・ソースコードが読みやすい
・オープンソース
処理速度が早い
Go言語はコンパイル言語です。一般的にコンパイル言語はインタプリタ言語より処理速度が速いです。
その理由は、コンパイル言語はプログラムの実行前に、あらかじめソースコードを機械語に翻訳(コンパイル)して実行するためです。
対して、インタプリタ言語は、ソースコードを1行ずつ機械語に翻訳(コンパイル)して実行するため、処理速度は遅くなります。
コンパイル言語とインタプリタ言語の一覧はこちらです。
コンパイル言語
・Go言語
・C
・C++
・C#
・Objective-C
・Java
・COBOL
など
インタプリタ言語
・Python
・JavaScript
・Ruby
・PHP
・Perl
など
さらに、この後に紹介する「並列処理が得意」も処理速度が速い理由の一つです。
また、Go言語はコンパイル自体のスピードも速く、開発時間の短縮にも適した言語です。
並列処理が得意
Go言語は並列処理が得意で、GoChannelを利用すれば、簡単に並列処理を作成することができます。
具体的には関数の前に「go」を加えるだけです。(16行目)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") } |
参考:A Tour of Go
こちらのページに飛ぶと、並列処理がどういうものかを実感することができます。Web上なので、Go言語の環境は必要ありません。
中身のソースコードを変更しながら実行できるので、並列処理以外にもよく分からない事があった場合は、色々と試してみると良いでしょう!
クロスコンパイルが可能
クロスコンパイルとは、開発PCの環境とは異なる環境で動作する、実行ファイルを生成することです。
例えば、MacでGo言語のプログラムをコンパイルする場合は、通常Mac用の実行ファイルしか作成できません。しかし、クロスコンパイルに対応していると、Windows用の実行ファイルも作成することができます。
ソースコードが読みやすい
ソースコードのフォーマットは、作成者の癖によってバラバラです。インデントや改行、スペースのバランスが人によって異なり、中には本当に読みづらいソースコードがあると思います。
go fmt機能を使用すると、自動整形されたソースコードが表示されます。整形されるということは、誰が書いても同じフォーマットになることを意味し、可読性は格段に上がります。
ただし、go言語に対応している開発エディタには、自動整形ツールが備わっていることが多いので、go fmt機能を使う場面は少ないかもしれません。
オープンソース
Go言語は、オープンソース(Open Source)です。
オープンソースとは、「ソースコードへのアクセスがオープンになっている」という意味で、すなわち、誰でも自由にソフトウェアを開発・再配布等ができるということです。
ただし、Go言語は「BSDライセンス」というライセンス形態で提供されています。公式のライセンス情報はこちら。
完全自由というわけではないので、開発を行う前に、ライセンス情報を確認することをおすすめします。
Go言語のデメリット
次にデメリットを紹介していきます。
デメリット
・例外処理が無い
・Generics(ジェネリクス)がない
・情報が少ない
例外処理がない
Go言語には、他の言語では当然備わっている例外処理がありません。
理由は「例外処理はソースコードを複雑化していて、ファイルオープン失敗のような通常エラーを、まるで致命的なエラーとして捉える傾向があるからだ」と説明されています。
しかし、Go言語は別のアプローチでエラーを検知できる仕組みを持っています。 Go言語は関数の戻り値を複数指定できて、その戻り値にエラー情報を載せることができます。通常エラーの場合は、この方法でエラーを検知することができます。
1 2 3 4 5 6 |
func Open(name string) (file *File, err error){ f, err := os.Open("filename.ext") if err != nil { log.Fatal(err) } } |
また、本当に致命的なエラーが発生した場合でも、そのエラーを検知し、回復できる仕組みがあると、公式FAQで述べられています。詳しくはこちらを参照してください。
Generics(ジェネリクス)がない
続けて、Go言語にはGenerics機能もありません。
Genericsとは、メソッドやクラスに「<>」を付加すると、メソッドやクラスが指定した型で作成できるというものです。総称型と言われます。
下の例だと、同じクラスを10行目ではString型、11行目ではInteger型で宣言しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Sample<T> { T data; // コンストラクタ public Sample(T value) { this.data = value; } } public class Test { public static void main(String[] args) { Sample<String> s = new Sample<>("Hello World"); Sample<Integer> i = new Sample<>(2020); } } |
とても便利な機能ですが、例外処理と同様、実行するためのソースコードが複雑になってしまうことが懸念されているため、機能の実装はされていません。
ただし、Genericsは追加検討されていることが、公式FAQで述べられています。
情報が少ない
Go言語は2009年に開発された言語で、まだ歴史は浅く、開発事例も少ないです。
C、Java、PHPなど、現在活躍しているプログラミング言語のほとんどは1970年〜から存在するので、どうしても情報が少なくなります。
情報が少ない上に、やっと見つけた参考記事は英語だった、みたいな事も多いので、これからGo言語を始める人は、最初苦労するかもしれません。
まとめ
以上になります。Go言語は、なんといっても、あのGoogleが開発した言語なので、今後需要は増していくことでしょう。言語としての性能も大変優秀なので、学ぶ価値は大いにありだと思います。 こんにちは!近年、多くのプログラミング言語の中で「稼げる言語」として人気が爆発しているのは、Googleが開発したGo言語です。本記事では、そのGo言語のインストール方法と、実際にプログラムを動かして、「Hello World」を表示するまでの方法を、丁寧に紹介していきます。 続きを見る
こちらの記事でインルトール方法を紹介しています!
おすすめ【5分簡単】Go言語をインストールしてHelloWorldを表示する
最後まで読んでいただき、ありがとうございました!