Go入門ハンズオン [基礎編](短縮版)

234 Views

December 14, 25

#go

スライド概要

2025年12月13日(土)に兵庫県神戸市で開催された「Go Workshop Conference 2025 IN KOBE」にて招待ワークショップとして「はじめてのGo言語教室」を開催した際に使用したテキスト「Go入門ハンズオン [基礎編](短縮版)」です。1時間30分向けに元版「Go入門ハンズオン [基礎編]」(https://www.docswell.com/s/qt-luigi/KDW1XR-the-first-go-room-basic-20251213)から補足の説明文とページを省いています。

profile-image

主にICTイベントでの発表資料を公開しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Go入門ハンズオン [基礎編](短縮版) はじめてのGo言語教室 13 December 2025 Ryuji Iwata Okayama, Japan

2.

Ryuji Iwata X (Twitter) : @qt_luigi Portfolio : sites.google.com/view/ryuji-iwata-portfolio

3.

何を作るの?

4.

成果物 タイピングゲームを作ろう!q@w@p $ ./typing The input : the × first input : first ○ Go input : go × room input : room ○

5.

基本仕様 表示する単語を配列で用意します。 [ "The", "first", "Go", "room" ] 以下、配列の要素の数だけ、添字(インデックス)の順番に繰り返します。 1. 単語を一つ表示します。 The 2. 単語を入力します。 input : The 3. 表示した単語と入力した単語が一致なら○を、不一致なら×を表示します。 ○

6.

作業ディレクトリの準備

7.

作業ディレクトリの作成 1. cdコマンドでホームディレクトリに移動。 $ cd (Windows: cd %HOMEPATH%) 2. mkdirコマンドで作業ディレクトリを作成(ここではtyping) $ mkdir typing 3. cdコマンドで作業ディレクトリに移動。 $ cd typing

8.

作業ディレクトリの初期化 実行:go mod init モジュールパス • Goのプロジェクトとして初期化(ここではexample.com/typing) $ go mod init example.com/typing ls (dir) コマンドでgo.modファイルが作成されていることを確認。 $ ls (Windows: dir) go.mod

9.

Hello "Go" World

10.

ソースファイルの作成 テキストエディターにて、以下の内容でファイル名を「main.go」にして保存。 package main import "fmt" var ( msg1="Hello" msg2 string ) func main() { msg2="world" fmt.Println(msg1, msg2) } ※ このまま書き写してください。

11.

ソースファイルの整形 ls (dir) コマンドでmain.goファイルが作成されていることを確認。 $ ls (Windows: dir) go.mod main.go 実行:go fmt ソースファイル名 • 整形されたソースファイルがあれば、そのファイル名が表示される。 $ go fmt main.go main.go

12.

実行結果 package main import "fmt" var ( msg1 = "Hello" msg2 string ) func main() { msg2 = "world" fmt.Println(msg1, msg2) }

13.

ソースファイルの実行 実行:go run ソースファイル名 $ go run main.go Hello world

14.

ソースファイルの解説

15.

main.goファイル // 実行できるプログラムを書く場合、パッケージ名はmainを指定 package main // 使用するパッケージを指定 import "fmt" // パッケージ内で使用する変数を宣言 var ( msg1 = "Hello" // ①宣言+初期値を代入 msg2 string // ②宣言のみ(値は後から代入) ) // main()関数 // 実行できるプログラムを書く場合、最初に呼び出される関数(エントリーポイント) func main() { msg2 = "world" // 値を代入 fmt.Println(msg1, msg2) // 引数値を半角空白文字で区切って標準出力 }

16.

ソースファイルについて ファイル拡張子は「.go」 BOMなしのUTF-8(文字コードの一種)で記述。 インデント(字下げ)はタブ文字。

17.

パッケージ 定数や関数などを、意味のある単位でまとめたもの。 基本、パッケージ名は1単語で命名。 Goでは、標準パッケージの充実度がウリのひとつ。 • 圧縮、データベース、ネットワーク、暗号化、画像処理、など archive crypto fmt log reflect sync weak bufio database go maps regexp syscall builtin debug hash math runtime testing bytes embed html mine slices text cmp encoding image net sort time compress errors index os strconv unicode container expvar io path strings unique context flag iter plugin structs unsafe pkg.go.dev/std

18.

変数の宣言 Goでは、変数を宣言するとゼロ値で初期化される。 var name string // 文字型: "" var age int // 数値型: 0(他: float型) var ( tf bool // 論理型: false chn chan // 参照型: nil(他: struct型、interface型) )

19.

関数 意味のある処理や利用頻度の高い処理を、ひとまとめにしたもの。 他のパッケージから呼び出せる関数は、名前の頭文字が大文字。 // fmtパッケージのPrintln()関数の呼び出し fmt.Println(msg1, msg2)

20.

配列とスライス

21.

配列 同じ型の複数の値を要素として扱う型。 最初に要素数を決めて変数を宣言するため、後から要素数を変更できない。 // 変数arrayを要素数4のstring型の配列で宣言 var array [4]string fmt.Println("初期値は", array) // 要素数はlen()組み込み関数で取得 fmt.Println("要素数は", len(array)) 実行結果 初期値は [ ] // イメージ:["", "", "", ""] 要素数は 4

22.

スライス 配列にて、後から要素数を変更できる仕組み。 // 変数exampleをstring型のスライスで宣言 var example []string fmt.Println("初期値は", example) // 要素数はlen()組み込み関数で取得 fmt.Println("要素数は", len(example)) 実行結果 初期値は [] 要素数は 0

23.

変数宣言+初期化 変数宣言 • パッケージレベルで初期化したり、明示的にゼロ値で初期化する際に使用。 import "fmt" // パッケージレベルで初期化 var example = []string{"The", "first", "Go", "room"} func main() { ... } 省略宣言 • varを省略できるが、関数内でのみ使用可能。 example := [4]string{"The", "first", "Go", "room"}

24.

要素の値の取得 単一の要素の値 example := [4]string{"The", "first", "Go", "room"} // [添字] 単一の値を取得 fmt.Println(example[2]) // 3番目の "Go"

25.

要素の値の変更 変更したい要素の位置を添字で指定して値を代入。 example := [4]string{"The", "first", "Go", "room"} // 4番目の "room" を "world" に変更 example[3] = "world" // 4番目…添字は3

26.

課題1 以下の内容でmain.goを編集した後、go runコマンドを実行して確認してください。 1-1:var句を削除した後、新たに次の変数をvar宣言してください。 • 変数名:example • 型:string型のスライス • 値:"The", "first", "Go", "room" 1-2:main()関数の内容を書き換えてください。 • 変数exampleの内容を標準出力する。

27.

解答1 package main import "fmt" var example = []string{"The", "first", "Go", "room"} func main() { fmt.Println(example) } 実行結果 $ go run main.go [The first Go room]

28.

反復

29.
[beta]
for文
ループ変数(ここではi)を使用して、ループ(処理の繰り返し)を制御する。
abc := []string{"a", "b", "c"}
for i := 0; i < 3; i++ {
fmt.Print(abc[i])
}
実行結果
abc
30.

range句 複数の値を保持する変数において、値の数だけ繰り返す。 ループ毎に1つまたは2つの戻り値が取得できる。 • 配列とスライス:添字と値 • マップ:キーと値(例:{"red":3, "blue":4, ...}) • 文字列:添字(バイトインデックス)と値(Unicodeコードポイント) • チャネル:値(要素) ※今回は配列とスライスを使用します。

31.

配列とスライス:添字と値を取得 第1戻り値変数(i)と第2戻り値変数(v)を指定する。 abc := []string{"a", "b", "c"} for i, v := range abc { fmt.Println(i, v) } 実行結果 0 a 1 b 2 c

32.

配列とスライス:添字だけを取得 第1戻り値変数(i)のみ指定する。 abc := []string{"a", "b", "c"} for i := range abc { fmt.Println(i) } 実行結果 0 1 2

33.

配列とスライス:値だけを取得 第1戻り値変数(_)と第2戻り値変数(v)を指定する。 abc := []string{"a", "b", "c"} for _, v := range abc { fmt.Println(v) } 実行結果 a b c

34.

_:ブランク識別子 Goでは、受け取るべき場所に変数がないと、エラーになる。 そのため、ダミー変数として「_」が用意されている。

35.

課題2 以下の内容でmain.goを編集した後、go runコマンドを実行して確認してください。 2-1:main()関数の内容を書き換えてください。 • for文とrange句を使用して、変数exampleの値を順番に標準出力する。

36.

解答2 package main import "fmt" var example = []string{"The", "first", "Go", "room"} func main() { for _, v := range example { fmt.Println(v) } } 実行結果 $ go run main.go The first Go room

37.

分岐

38.

if文 Goでは、条件(三項)演算子(例:lang=="Go"?1:0)はなし。 v := "GoLang" if v == "golang" { fmt.Println("○") } else if v == "GOLANG" { fmt.Println("△") } else { fmt.Println("×") } fmt.Println(v) 実行結果 × GoLang

39.

課題3 以下の内容でmain.goを編集した後、go runコマンドを実行して確認してください。 3-1:main()関数のfor文のfmt.Println(v)の後に、次の処理を追加してください。 1. ループ変数vの値を判定するif文を追加してください。 • 値が"Go"なら"○"を標準出力する。 • それ以外なら"×"を標準出力する。

40.

解答3 package main import "fmt" var example = []string{"The", "first", "Go", "room"} func main() { for _, v := range example { fmt.Println(v) if v == "Go" { fmt.Println("○") } else { fmt.Println("×") } } }

41.

解答3 実行結果 $ go run main.go The × first × Go ○ room ×

42.

標準入出力

43.

標準入出力 標準入力 • 情報の入力元:キーボード、ファイル、など 標準出力 • 情報の出力先:ターミナル、ファイル、など

44.

標準入力された文字列の取得 Goでは、キーボードから文字を入力して改行された時までの文字列を取得するための • fmt.Scanln()関数 が用意されており、標準入力された値は関数内で引数(ここではa)に格納される。 func Scanln(a ...any) (n int, err error)

45.

これまでの書き方:値渡し Goでは、関数の引数は関数内にコピーされて渡される。 fmt.Scanln()関数内では、コピーされた引数に入力値が格納されている。 • コピーされた引数と値の変更は、関数内だけで有効。 関数が終了した後、引数の値を確認すると最初のまま。 // 入力プロンプトを標準出力に表示 fmt.Print("入力は? > ") var answer string fmt.Scanln(answer) fmt.Printf("入力は %s です\n", answer) 実行結果 入力は? > 入力は です

46.

今回の書き方:参照渡し Goでは、変数名の先頭に&をつけると、値ではなく • 値が格納されている場所(参照:ポインター) を格納するようになる。 関数内ではコピーされた参照に値が格納されるので、引数の値が書き変わる。 // 入力プロンプトを標準出力に表示 fmt.Print("入力は? > ") var answer string fmt.Scanln(&answer) fmt.Printf("入力は %s です\n", answer) 実行結果 入力は? > Go 入力は Go です

47.

値渡しと参照渡し ファイルとショートカットに例えるとわかりやすいかと。 値渡し:ファイル(値)を渡す • 関数内ではコピーされたファイルに値が書き込まれる。 • 関数に渡す前のファイルを開くと「変更されていない」 参照渡し:ファイルのショートカット(参照)を渡す • 関数内ではコピーされたショートカットのファイルに値が書き込まれる。 • 関数に渡す前のファイルを開くと「変更されている」

48.

fmtパッケージ 標準出力(Print系)、標準入力(Scan系)、標準エラー(Error系)の関数が体系的に集 約されているため、最初に読み始めるパッケージとして良いかと。 pkg.go.dev/fmt#pkg-index

49.

課題4 以下の内容でmain.goを編集した後、go runコマンドを実行して確認してください。 4-1:main()関数のfor文のfmt.Println(v)とif文の間に、次の処理を追加してください。 1. 入力プロンプトとしての"input:"を改行なしで標準出力してください。 2. 次の変数をvar宣言してください。 • 変数名:answer • 型:string型 3. キーボードから入力して改行された文字列を、変数answerに格納してください。 4. ループ変数vの値を判定するif文の条件式を書き換えてください。 • vの値がanswerの値と一致なら"○"を標準出力する。

50.

解答4 package main import "fmt" var example = []string{"The", "first", "Go", "room"} func main() { for _, v := range example { fmt.Println(v) fmt.Print("input : ") var answer string fmt.Scanln(&answer) if v == answer { fmt.Println("○") } else { fmt.Println("×") } } }

51.

解答4 実行結果 $ go run main.go The input : The ○ first input : first ○ Go input : Go ○ room input : loom ×

52.

完成に向けて

53.

実行ファイルを生成 ls (dir) コマンドでディレクトリ内のファイルの存在を確認。 $ ls (Windows: dir) go.mod main.go 実行:go build ソースファイル名 $ go build main.go $ ls (Windows: dir) go.mod main main.go • ソースファイルと同名の実行ファイル「main」が生成される。 実行:go build -o 実行ファイル名 ソースファイル名 $ go build -o typing main.go (Windows: go build -o typing.exe main.go) $ ls (Windows: dir) go.mod main main.go typing (Windows: typing.exe) • 指定した名前の実行ファイル「typing(.exe)」が生成される。

54.

完成!q@w@p 生成された実行ファイルを実行。 $ ./typing (Windows: .\typing.exe) The input : The ○ first input : first ○ Go input : Go ○ room input : room ○

55.

まとめ

56.

学んだこと Goの基本的なソースコードの構成とプログラミングの流れを学びました。 その際、goコマンドについても学びました。 • go mod init • go fmt • go run • go build データ構造における配列とスライスについて簡単に学びました。 構造化プログラミングにおける「順接・反復・分岐」の制御構成を学びました。 標準出力と標準入力について簡単に学びました。

57.

続きは、公式サイトのコンテンツで 公式のチュートリアルを進めるのが良いかと。 • Tutorials - The Go Programming Language pkg.go.dev/doc/tutorial/ 公式の文法習得ツアーに取り組むも良し。 • A Tour of Go pkg.go.dev/tour/list いつでも気軽にGoをコーディング&実行。 • Go Playground - The Go Programming Language pkg.go.dev/play/

58.

Go Playground - Goの遊び場 pkg.go.dev/play/

59.

Thank you Ryuji Iwata Okayama, Japan @qt_luigi