高速で覚えやすいGo言語

今回紹介するのは、Googleによって開発されたプログラミング言語「Go言語」です。「Google」の最初の二文字を冠したこの言語を、5秒で説明するなら『実行が速くて覚えやすいモダンなプログラミング言語』と言えるでしょう。

ホリネズミのキャラクターが印象的なGo言語のWebサイト

Go言語は2009年にオープンソースのプロジェクトとして発表以来、堅実に人気を伸ばしてきました。特にこの数年、C言語の置き換えとして、Dockerなどの基盤ソフトウェアの開発でも採用されており、ちょっとしたツールの開発やWebサーバでの活用など、さまざまな分野で使われています。2018年のStackOverFlowの年次レポートでも、最も愛されるプログラミング言語の5位にGo言語がランクインしています。

マルチプラットフォームであり、Windows/macOS/Linux/Android/iOSと各種OSに対応しています。何より、コンパイル言語であるため、Pythonなどの動的言語に比べ実行速度が圧倒的に速いのが特徴です。また、プログラミング言語の構文がシンプルなので覚えやすいという特徴もあります。その特徴を箇条書きにすると、以下のようになります。



・オープンソース

・マルチプラットフォーム

・シンプルな構文で覚えやすい

・強い静的型付け言語で安全性が高い

・コンパイラ言語で、コンパイルも高速

・並行処理が得意





Go言語をインストールしてみよう

Go言語には、Webブラウザ上で手軽に実行できる『The GO Playground』が用意されています。文法をちょっと試してみたいだけという方なら、Playgroundだけで事足りるでしょう。

Webブラウザ上でGo言語を試すことができる

各OS向けにGo言語をインストールするには、以下のようにします。

WindowsにGoをインストール

WindowsにGoをインストールするには、こちらからWindows向けのインストーラーをダウンロードします。インストーラー自体は英語ですが、[Next]のボタンを数回、[Install]のボタンを1回インストールすると、無事にインストールが完了します。

Windowsにインストールしているところ

macOSにGoをインストール

macOSでも、Windows版と同じように、こちらからmacOS向けのインストーラーをダウンロードできます。また、Homebrewを利用してコマンドライン(ターミナル.app)からインストールすることもできます。

brew install golang

Hello, World!で見るGo言語の基本

冒頭で紹介したように、Go言語は構文がシンプルなのが特徴です。サッと覚えて、すぐに実践できるというのは嬉しい点です。どんな雰囲気でプログラムを作るのか、確認してみましょう。まずは、お決まりのHello, World!を実行してみます。以下のプログラムをテキストエディタに貼り付けて「hello.go」という名前で保存しましょう。

package main import ( "fmt" ) func main() { fmt.Println("Hello, World!") }

コマンドライン(Windowsなら「PowerShell」か「コマンドプロンプト」、macOSなら「ターミナル.app」)から、以下のコマンドを入力するとプログラムを実行できます。

go run hello.go

すると、Hello, World!と出力されます。

それでは、プログラムを確認してみましょう。まず、冒頭でpackage mainと書くことから、Go言語にはパッケージシステムの仕組みがあることが分かるでしょう。また、import ( ... )と書くことにより、任意のパッケージを取り込んで使うことができます。関数の宣言がfuncで、最初に実行される関数がmain()です。つまり、プログラムの中で、必ず、main()関数を定義する必要があります。

なお、以下のように書くと、プログラムを実行せずに、単一で実行できる実行ファイルを出力します。

go build hello.go

なお、バージョン1.10(macOS)で生成してみたところ、2.1MBの実行ファイルが生成されました。

Go言語のどこがモダンなのか？「型推論」がある

また、Go言語はモダンなプログラミング言語らしく、「型推論」という仕組みを備えています。ここでは簡単に型推論を試してみましょう。C言語をはじめ、一般的なコンパイラ言語では、変数の型に厳しく、変数を使う度に、整数型、実数型、文字列型など、用途に応じた変数の型を指定しなければなりません。しかし、Go言語には、型推論の機能があるため、PythonやRubyのような動的言語のように変数の型を省略して書くことができます。

package main import ( "fmt" ) func main() { var a int = 3 // --- (*1) var b = 2 // --- (*2) c := 10 // --- (*3) d := a * b * c fmt.Println(d) }

実行すると、3 ＊ 2 ＊ 10が計算されて、60が表示されます。

Go言語には型推論がある

Go言語で、変数を宣言するには、(＊1)のように「var 変数名 型名 = 値」のような書式で記述します。しかし、型推論のおかげで、(＊2)のように型名を省略して「var 変数名 = 値」と書くこともできます。そして、さらに、(＊3)のように「変数名 := 値」の書式で書くと「var」も省略して記述できます。

FizzBuzz問題を解いてみる

もう少しGo言語の雰囲気を知るために『FizzBuzz問題』を解いてみましょう。FizzBuzz問題とは、以下のような問題です。

1から100までの数を出力するプログラムを書いてください。ただし、3の倍数のときは数の代わりに｢Fizz｣と、5の倍数のときは｢Buzz｣と表示してください。3と5の倍数の時は｢FizzBuzz｣と表示してください。

package main import ( "fmt" ) func main() { for i := 1; i <= 100; i++ { fizzbuzz(i) } } func fizzbuzz(i int) { if i % 3 == 0 && i % 5 == 0 { fmt.Println("FizzBizz") } else if i % 3 == 0 { fmt.Println("Fizz") } else if i % 5 == 0 { fmt.Println("Buzz") } else { fmt.Println(i) } }

プログラムを実行すると、以下のように表示されます。

今回は、敢えて本連載一回目の「Rust」のプログラムと同じ構造で書いてみました。そのため、RustのFizzBuzz問題のプログラム比べると興味深いことでしょう。

まとめ

以上、今回は、ここ数年人気急上昇中のGo言語について紹介しました。Go言語は速度が速いだけでなく、実用的なライブラリも充実しており、シンプルな言語仕様のおかげで、習得も容易です。

また、Go言語でプログラムを書いてコンパイルすると、単一の実行ファイルが生成されるので、開発したプログラムの配布も容易というのは、大きなメリットです。そして、個人ではなく、Googleが開発しているという安心感もあります。本稿がGo言語を始めるきっかけになれば幸いです。