DevFest2017でプログラミングはじめて! という人のためのGoの教材を作りたいと宣言したので, それについての枠組みを書こうと思います。
あくまでもまろやかな甘口を表現していきたいという所存であります。
プログラミングは楽しいものなのだ, ということをGoを使って果たして実現できるのだろうか...そういう人が増えてくれたら嬉しいものです。
流れはこんなことを考えています。
- Goが動くための基本的な話をします。
- The Go Playgroundを利用して, プログラムの基本的な構文を学びます。
- 自分の手元で環境構築をします。
- FizzBuzzをやります。
1. Goのこと
世の中にはたくさんのプログラミング言語があって, その中でもGoはどういう子なのか。
そういう話がGopherを交えながらできればいいなあと思っています。GopherもGoの魅力のうちの一つです。GopherがいるからGoではじめたい! というプログラマーのヒヨコがいるかもしれません。
また, 静的とかGCとかはこの時点では話をしない予定です。甘口なので。
2. プログラムの基礎
開発環境の構築の前に, Playgroundを利用して, すぐにプログラミングの構文演習を行います。
2-1. Goの構成
importやmainの話をします。コメントについてもココで説明をします。
ただし, この時点では, 宣言(const, type, var, func, package, import)については軽く触れるのみとし, mainの中に処理を書いていくよ, という話のみをする予定です。
package main
import (
"fmt"
)
func main() {
// fmt.Println("Hello, これは表示しません")
/*
fmt.Println("Hello, これも表示しません")
fmt.Println("Hello, これも表示しません")
*/
fmt.Println("Hello, playground")
}
2-2. 文字列の出力
文字列をそのまま出力するfmtのPrint系の話をします。
- fmt.Print
- fmt.Println
上記のバリエーションがあることを説明していきます。変数の代入(fmt.Sxxx)やフォーマット(fmt.xxxf)についてはまだココでは触れません。
また, ココでちょうどfmt
をimportしているので, goimports
やgofmt
についてもplayground上で触れます。
ココでRun
を押下して, undefined: fmt
を出す。
2-3. 変数と型
下記について話をします。
- 変数の宣言と代入
- 型のバリエーション
- 整数
- 浮動小数点
- 虚数
- 文字列
- Rune
- Bool
- どういったときにエラーとなるか
2-4. 算術演算子
下記について話をします。
2-3.で学んだ変数をコッソリとたくさん使います。
- 足し算
- 引き算
- 掛け算
- 割り算
- 余り
2-5. 比較演算子
下記について話をします。
- 等しい
- 等しくない
- 未満
- 以下
- より大きい
- 以上
2-6. 分岐構造
通常のif, else, switchについて話をします。
2-7. 繰返し構造
for, break, continueについて話をします。
インクリメントやデクリメントについても説明をします。
逆にその他(whileやgoto等)についてはココでは触れません。
2-8. sliceとmap
この流れでsliceやmapが必要か, やや迷っています...
3. 環境構築
今まで色んな人と一緒に環境構築をしてきましたが, みんないつも大変そうでした。
はじめたばかりなのにここでドハマりしてしまうと, Goを嫌いになってしまうかもしれません。
ココは甘口なので, なるべく最短で動かせる状態を作れるようにしようと思っています。
3-1. brewを入れる。
3-2. Goを入れる。
3-3. bashに設定する。
3-4. 最低限必要なパッケージをgo get
する。
テキストエディタについては, はじめてならAtomやGolandあたりが良いのではないか, と思っています。
わたしはvim-go
を利用するためにvim修行中ですが, vimそのものの環境構築だけでも大変な時間を要しました...
テキストエディタで保存時にgoimports
やgolint
しても良いのですが, 敢えて手元で実行してもらうでも良いのではないでしょうか。
4. FizzBuzz
Fizz
ってなに? Buzz
ってなに? と思ってしまうかもしれません。
甘口な教材ではそれぞれ好きな言葉に置き換えます。カレー
とかリンゴ
とか。もちろんそのままFizzBuzz
でも問題ありません。
5. 触れていないこと
甘口だとこの辺はまだいらないのではと思っています。
- 宣言(const, type, var, func, package, import)
- 関数
- 構造体
- レシーバとポインタ
- インターフェース
- 並列
尻切れ感で満載ですが, これから太らせていこうとしています。
ご意見なんてもらえたら, とてもうれしいですʕ•ᴥ•ʔ