Go言語をはじめよう

本連載は、Googleによって開発されたプログラミング言語「Go言語」をゼロからはじめる方のためのものとなっています。今注目を集めているGo言語について、より楽しく学べる連載です。一回目の今回は、Go言語の紹介から、インストール、簡単なプログラムの実行までの手順を紹介します。

Go言語とは?

そもそも、Go言語とは『実行が速くて覚えやすいモダンなプログラミング言語』です。2009年にオープンソースのプロジェクトとして発表されました。その後、着実に人気を伸ばしており、特にこの数年、C言語の置き換えとして、様々な基盤ソフトウェアの開発やWebアプリの開発など、様々な分野で利用されています。

マルチプラットフォーム対応なのも嬉しい点です。Windows/macOS/Linux/Android/iOSと主要OSで動作します。また、コンパイル言語であり動作が高速です。PythonやRubyなどのスクリプト言語の何倍もの速度で動かすことができます。そして、コンパイルすれば、Go言語をインストールしていない環境でもプログラムを動かすことができます。さらに、WindowsでmacOS用の実行ファイルを作ったり、macOSでWindowsやLinuxで動く実行ファイルを作ったりと、異なる環境で同じように動くアプリを開発できます。

そして、何より、覚えやすく癖がないその構文は、これから新しいプログラミング言語を覚えようと思っている人に優しいものです。それでは、これからGo言語を始めましょう。

Go言語をインストール

それでは、Go言語を手元のPCにインストールしましょう。Go言語は、Webサイトからダウンロードすることができます。

The Go Programming Language
[URL] https://golang.org/

Windowsの場合

Windowsであれば、上記のページのダウンロードのリンクをクリックし、[Microsoft Windows]よりダウンロードできます。

ダウンロードしたインストーラーは、MSI形式です。ダブルクリックしてインストーラーを実行したら、基本的に画面右下の[Next]ボタンを数回クリックすればインストールが完了します。

  • Go言語をインストールしているところ

    Go言語をインストールしているところ

macOSの場合

macOSでは上記のWebサイトからインストーラーをダウンロードする方法のほかに、Homebrewを使ってインストールできます。ターミナル.appを開いて、以下のコマンドを実行しましょう。もし、Homebrewがインストールされていない場合は、こちらを参考にしてインストールします。

brew install go

一番簡単なプログラム

それでは、Go言語で一番簡単なプログラムを作ってみましょう。以下は、画面に「Hello, World!」と表示するだけのプログラムです。以下のプログラムを「hello.go」という名前で保存しましょう。その際、Windowsのテキストエディタを使う場合には、文字エンコーディング(文字コード)がUTF-8で保存されるように気をつけてください。

// パッケージ名を指定 --- (*1)
package main

// fmt パッケージを取り込む --- (*2)
import "fmt"

// main関数の定義 --- (*3)
func main() {
    // 文字列を出力する --- (*4)
    fmt.Printf("hello, world!\n")
}

プログラムを実行するには、コマンドライン(WindowsならPowerShell、macOSならターミナル.app)を起動して、以下のコマンドをタイプします。

cd (プログラムを配置したディレクトリのパス)
go run hello.go

すると、以下のように表示されます。

  • 一番簡単なプログラムを実行したところ - macOSの場合

    一番簡単なプログラムを実行したところ - macOSの場合

  • 一番簡単なプログラムを実行したところ - Windowsの場合

    一番簡単なプログラムを実行したところ - Windowsの場合

プログラムを確認してみましょう。Goのプログラムでは、必ずパッケージ名を指定する必要があります。プログラムの(*1)の部分を見てください。今回のように簡単なプログラムであれば、package mainと書きます。次に、(*2)の部分では、このプログラムで利用する外部パッケージを指定します。このプログラムでは、画面出力のために、fmtというパッケージを利用します。(*3)で、main関数を定義します。そして、(*4)では、fmt.Printf関数を利用して、画面にHello, World!と表示します。

次に、実行ファイルを作る方法を紹介します。実行ファイルを生成するには、コマンドラインで以下のようにコマンドを実行します。

# コンパイル --- (*1)
go build hello.go



# 実行 --- (*2)
./hello 

最初の(*1)のコマンドを実行すると、実行ファイルを生成します。そして、二番目の(*2)のコマンドで生成した実行ファイルを実行します。ただし、コンソール画面に文字を出力するだけのプログラムですが、1.9MBほどのサイズになります。

  • Windowsで生成されるhello.exe(コマンドプロンプトでの実行はディレクトリからそのままhello.exe)

    Windowsで生成されるhello.exe(コマンドプロンプトでの実行はディレクトリからそのままhello.exe)

肥満度判定BMI計算をしてみよう

次に、Go言語で簡単な数値計算をしてみましょう。ここでは、計算例として、肥満度判定(BMI計算)をしてみたいと思います。BMIとは、身長と体重から簡単に肥満度を計算するものです。そして、このBMIの値が22に近いほど健康を持続できるとも言われています。

[BMIの計算式]
BMI = 体重kg ÷ (身長m × 身長m)
適正体重 = (身長m × 身長m) × 22
肥満度 = 体重 / 適正体重 × 100

この計算を行うプログラムを作ってみましょう。以下のプログラムを「bmi.go」というファイル名で保存しましょう。

package main
// ライブラリの取り込み --- (*1)
import (
  "fmt"
  "math"
)

// 体重kgと身長cmを指定 --- (*2)
const weight = 60
const height = 165

func main() {
  // BMIの計算 --- (*3)
  var hm = height / 100.0
  var bmi = weight / math.Pow(hm, 2)
  var bestW = math.Pow(hm, 2) * 22.0
  var per = weight / bestW * 100
  // 結果を表示 --- (*4)
  fmt.Printf("BMI=%f, 肥満度=%.0f\n", bmi, per)
}

コマンドラインからプログラムを実行してみましょう。

go run bmi.go

すると、以下のように表示されます。

  • BMIの計算をしてみたところ

    BMIの計算をしてみたところ

プログラムの(*2)の部分を、自身の体重と身長に置き換えてみると、それぞれの結果がでますので書き換えて実行してみると良いでしょう。

さて、プログラムを簡単に確認してみましょう。(*1)の部分では、ライブラリの取り込みを行います。ここでは、fmtとmathの二つのライブラリを利用しますが、複数のライブラリを取り込む場合には、丸括弧を使って取り込むライブラリを一行に一つずつ並べて記述できます。

次に、(*2)の部分を見てください。ここでは、体重と身長を定数として指定します。定数の定義には『const 定数名 = 値』のように記述します。定数は書き換えのできない値を指定するときに利用します。

そして、main関数の中(*3)では、BMIの計算を行います。変数の定義を行うには『var 変数名 変数型 = 値』のように記述します。最後に、(*4)の部分で計算した値を、書式に埋め込んで表示します。fmt.Printfを使うと、特定の書式に従って数値を画面に出力できます。第一引数に書式文字列を指定し、第二引数以降で埋め込みたい値を指定します。第一引数の文字列内で、"%f"とか"%.0f"と書いているのが書式の指定部分です。

Go言語の型推論について

ちょっと難しい話になりますが、Go言語には頼もしい『型推論』という機能がついています。そのおかげで、JavaScriptのような動的スクリプト言語のような気軽さで変数の宣言と値の計算を行うことができます。

上記のBMI計算のプログラムを見てみると、変数利用する際、型宣言をまったく記述していないことに気づくでしょう。Go言語は静的型付け言語であり、基本的には型の指定が必要なのですが、この型推論の機能により型宣言を省略できるのです。

ちなみに、上記のBMIの計算では、計算に浮動小数点型(float64)を利用しています。浮動小数点型とは整数ではなく実数の計算を行う際に利用される型です。それで、下記のプログラムの(*a)(*b)(*c)は、いずれの書き方も同じ意味になります。

// 型を明示的に指定する場合 --- (*a)
var hm float64 = 165 / 100.0

// 型の指定を省略する場合 --- (*b)
var height = 165 / 100.0

// さらに宣言を省略する場合 --- (*c)
hm := 165 / 100.0

変数の型を省略しないで記述する場合、以下のように(*a)のように記述します。そして、この計算の場合、明らかに実数計算(浮動小数点型)なので、(*b)のように型宣言は省略できます。さらに、(*c)のように代入文を「:=」で書くと、変数宣言と代入を一度に記述できます。

ただし、注意点があります。Go言語では、整数を100のように表し、実数を100.0のように表します。そのため、以下の三つの文は同じ10を3で割って変数に代入する式ですが、実行結果が変わります。

a := 10 / 3    // aは、int型 3
b := 10 / 3.0    // bは、float64型 3.333333
var c float64 = 10 / 3    // cは、float64型 3.0

aの変数にはint型の3が入り、bの変数にはfloat64型の3.333333が入り、cの変数にはfloat64型の3.0が入ります。なお、三つ目cの変数の計算の場合、10 / 3が整数型で計算され、計算結果がfloat64型の変数に代入されます。このように、数値の書き方により数値の表す型が異なるという点は、ハマりやすいので、よく覚えておく必要があります。

まとめ

以上、今回はGo言語について、また、インストールと簡単なプログラムの実行の手順を紹介しました。Go言語は基本さえ押さえてしまえば、手軽に実行ファイルを作って動かすことができます。これからこの連載では、ちょっと役立つプログラムをGo言語で紹介していきますので、お楽しみに!

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。