コース目次 / 第0章

試食 — Goの口当たり

インストールなしで、ブラウザの中でGoを3つだけ触ってみます。

第0章 / 全5章目安 約15分この章のゴール: Goの「質実」な書き味と、並行処理の軽さをつかむ

インストールは要りません。Goには公式のPlaygroundがあり、ブラウザだけでそのまま動きます。

用意するもの

ブラウザで Go Playground を開いてください。Goの公式サイトの中にある、そのまま実行できるページです。

すでにコードが入っています。Run ボタンを押してみてください。下に Hello, 世界 と出れば準備完了です。

ひと口め: 書き方の作法

エディタの中身を全部消して、これを貼ってください。

Playgroundに貼る
package main

import "fmt"

func main() {
	for i := 1; i <= 3; i++ {
		fmt.Println(i, "杯目")
	}
}

最初に気づくのは「決まり事が多い」ことだと思います。 package main で始まり、使うものを import し、func main() から動き出す。省略はできません。
これはGoの思想で、「書き方の自由度を下げて、読むときの負担を下げる」という設計です。ここが第一の分かれ目です。窮屈と感じるか、迷わなくて楽と感じるか。

もうひとつ試してください。Format ボタンを押します。字下げや空白が勝手に整います。

Goには「正しい見た目」が1つだけ決まっています。書き方でもめる余地がありません。

ふた口め: エラーは戻り値

Playgroundに貼る
package main

import (
	"fmt"
	"strconv"
)

func main() {
	n, err := strconv.Atoi("123")
	fmt.Println(n, err)

	m, err := strconv.Atoi("abc")
	fmt.Println(m, err)
}

2行目の結果に注目してください。0 と、エラーの説明が出ます。

Goには例外(try/catch)がありません。失敗するかもしれない関数は、答えとエラーの2つを返します。呼ぶ側は毎回それを受け取ります。
このあと if err != nil という行を、うんざりするほど書くことになります。Goの挨拶みたいなものだと思ってください。冗長だという批判もあり、失敗を見落としにくいという評価もあります。ここが第二の分かれ目です。

み口め: 並行処理

Goの顔とも言える機能です。

Playgroundに貼る
package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var wg sync.WaitGroup
	start := time.Now()

	for i := 1; i <= 3; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()
			time.Sleep(time.Second)
			fmt.Println(i, "番、終わり")
		}()
	}

	wg.Wait()
	fmt.Println("かかった時間:", time.Since(start).Round(time.Millisecond))
}

1秒かかる仕事を3つやったのに、合計は約1秒です。順番にやれば3秒かかるところを、同時に走らせています。

やったことは go と書いただけ。関数の前に go を付けると、それが同時に走ります。この手軽さがGoが選ばれる最大の理由です。

この言語の性格

感じたこと Goの設計思想
決まり事が多い 書き方を1つに絞って、読む負担とレビューの争いを減らす
エラーを毎回受け取る 失敗を見落とさせない。隠れた例外の飛び方を無くす
go だけで同時に走る 並行処理を言語の中心に置いた、数少ない言語

ここまでで分かること

「合わないかも」と思ったなら、それも収穫です。15分で分かったなら上出来で、それがこの試食コーナーの目的です。別の言語を試すのも、まったく正しい進み方です。
「もう少し触ってみたい」と思ったなら、次の章で Go をあなたのパソコンに入れます。ここから先は手元に残る道具を作ります。

持ち帰りに進む前に

次の章で入れるものと、かかる時間の目安です。

内容
入れるもの Go本体(公式インストーラ)
ダウンロード 約60MB
時間の目安 20〜30分
環境構築の重さ ★☆☆(コンパイル言語の中でいちばん軽い)

こうなっていればOK

卒業まであと4章です。

この章はまだ完了していません。