はじめに
モダン言語に興味がありますか?SwiftやRustなど、時代の変遷に合わせて次々と新しい言語が生まれています。近年生まれている言語は、安全性と並列性が重視される傾向にあります。今回紹介するGo言語でも同様です。海外ではコンテナ型仮想化ソフトDockerに採用されており、国内でも普及が進んでいます。
この記事では、Go言語の概要をサクッとつかみたい方のために、Go言語の概要と特徴をお伝えしていきます。Go言語は登場から6年余りが経ち、言語仕様も安定してきています。まずは概要だけでも知っておきましょう。
Go言語とは?
Go言語公式サイト:https://golang.org/
Go言語リポジトリ:https://github.com/golang/go
Go言語は、Googleが開発しているオープンソースのプログラミング言語です。2009年に発表されてから着実にバージョンアップを重ね、2016年6月現在の最新バージョンは1.6.2になっています。WindowsやMac、LinuxだけでなくAndroidやiOSもサポートしており、スマートフォンやタブレット向けアプリの開発にも使えます。構文はC言語に近いですが、簡潔に記述できるように独自の変更が加えられています。似ているようで細かい違いがあるので、最初はちょっと戸惑うでしょう。
Go言語の特徴
*文末のセミコロンが不要
C言語系の言語では、文末にセミコロンを記述しないと文の終わりとしてみなされず構文エラーになります。しかし、Go言語では明示的にセミコロンを記述しなくても、コンパイラにより自動的に文末であるとみなされます。このため、いちいちセミコロンを記述しなくてもよくなり、コードがすっきりします。もちろん、明示的に書いても問題はありません。なお、1行に2つ以上のステートメントを記述する場合には必須です。この仕様のため、次のように波括弧を新しい行に配置するコーディングスタイルは構文エラーになります。
×ダメな例 if n < 10 { //処理 }
正しくは、次のようにかならずステートメントと同じ行に開始の波括弧を配置しなければなりません。これにより、コードスタイルが統一されるというメリットもあります。
○正しい例 if n < 10 { //処理 }
*プログラマーによる記述の差異が少ない
Go言語には、C言語系の言語によくあるwhileやdo/while、三項演算子などがありません。また、バグの温床になりがちなif文などでの波括弧の省略もできません。こういった言語仕様により、プログラマー間の記述の差異を抑え、大規模開発でも保守しやすい統一されたコーディングスタイルを適用することが容易になります。また、コンパイラと同時にインストールされるコードフォーマットツールを使うことで、ソースコードを一定のフォーマットに統一できます。
*クロスコンパイルが簡単にできる
クロスコンパイルとは、コンパイラを実行する環境とは別の実行環境用のプログラムをコンパイルすることです。たとえば、Windows上のGoコンパイラでLinux用のGoプログラムをコンパイルすることができます。また、32ビットマシンで64ビットプログラムをコンパイルすることも可能です。これにより、同じソースファイルから各種プラットフォーム用のバイナリをひとつのマシンでコンパイルできます。クロスコンパイルをするには、次のように環境変数で対象のプラットフォームを指定してコンパイルするだけです。
・環境変数のセット
GOOS=linux GOARCH=amd64
・コンパイル
go build hello.go
スクリプトで自動化すれば、ほとんど手間なしにできて便利です。
*標準パッケージ(ライブラリ)が豊富
比較的新しい言語ですが、標準パッケージが充実しています。自分でコードを書かなくても、開発のかなりの部分をカバーしてくれるでしょう。生産性も高まりますね。
Go標準パッケージ一覧:https://golang.org/pkg/
また、Go言語ではGitHubなどのリポジトリからパッケージをインポートして使うこともできます。たとえば、GitHubからパッケージを取得するには次のようにします。
go get github.com/mitchellh/cli
後は、ソースファイルの中で次のようにインポートするだけです。
import "github.com/mitchellh/cli"
なお、この外部パッケージはGOPATH環境変数で指定されているフォルダにダウンロードされます。事前にGOPATH環境変数をセットしておきましょう。
*ゴルーチンによる軽量スレッド
モダンな言語はかならずと言っていいほど並列処理をサポートしています。Go言語では、ゴルーチンという軽量スレッドが言語仕様レベルで組み込まれています。ゴルーチンには通常の関数がそのまま使えます。ゴルーチンとして関数を呼び出すには、関数呼び出しの前に「goキーワード」をつけるだけです。
go logging(“ゴルーチン”)
これだけで、関数が非同期で並列実行されます。スレッドはGoランタイムが管理してくれますので、明示的に指定する必要はありません。ちなみに、main関数自体もゴルーチンで実行されています。
また、ゴルーチンの終了を待つこともできますし、チャネルという通信手段を使ってゴルーチン同士でデータをやり取りすることも可能です。このようにGo言語では簡単に並列処理を行えます。
まとめ
Go言語の概要がつかめましたか?興味がわいた方は、本格的にGo言語をはじめてみましょう。Googleが開発を主導していることもあり、今後も活発に開発が続けられていくことでしょう。PaaSプラットフォームGoogle App Engine(GAE)でもGo言語がサポートされています。普段GAEを使っている方は、これを機にはじめてみてはいかがでしょうか?
本ブログは、Git / Subversion のクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
開発の効率化をしたい!もっと便利なツールを使いたい!そんなお悩みをtracpathで解決!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments