Go言語を学び始めて、ついに1週間が経過しました!
参考にしてきたのは Go Tour(日本語版)
そして毎日の30分の積み重ね。
今日はその集大成として、これまでの要素を組み合わせた「小さなプログラム」にチャレンジ!
目標
- 構造体(struct)
- スライス(slice)
- マップ(map)
- 関数
- 条件分岐
- エラーハンドリング
これらを1つのコードの中に入れてみます。。!
練習課題:学生情報を扱うプログラムを作ってみる
概要:
- 生徒の名前・点数を持つ構造体
Student
- 生徒のリスト(スライス)を作る
- 名前から点数を検索するマップ
- 点数に応じて評価(A〜D)を返す関数
- エラー処理付きで検索&評価を行う
コード全体はこちら!
package main import ( "errors" "fmt" ) type Student struct { Name string Score int } // スコアを評価に変換する関数 func evaluate(score int) string { switch { case score >= 90: return "A" case score >= 70: return "B" case score >= 50: return "C" default: return "D" } } // 生徒名からスコアと評価を取得する関数(エラーハンドリングあり) func getStudentEvaluation(name string, scoreMap map[string]int) (int, string, error) { score, ok := scoreMap[name] if !ok { return 0, "", errors.New("指定された生徒が見つかりませんでした") } grade := evaluate(score) return score, grade, nil } func main() { // スライスとしての生徒リスト students := []Student{ {"たろう", 85}, {"はなこ", 92}, {"じろう", 47}, } // 名前 → スコア のマップを作成 scoreMap := make(map[string]int) for _, s := range students { scoreMap[s.Name] = s.Score } // 生徒名を指定して評価を確認 namesToCheck := []string{"はなこ", "じろう", "さぶろう"} for _, name := range namesToCheck { score, grade, err := getStudentEvaluation(name, scoreMap) if err != nil { fmt.Println("エラー:", err) continue } fmt.Printf("%sさんのスコアは%d点、評価は%sです\n", name, score, grade) } }
実行結果(例)
はなこ さんの点数は 92、評価は A です じろう さんの点数は 47、評価は D です エラー: 指定された生徒が見つかりませんでした
文系SE的ふりかえりポイント
今日のコードで使った要素まとめ
- 構造体(Student)でデータをまとまりとして定義
- スライス(students)で複数のデータをリスト化
- マップ(scoreMap)で高速検索を実現
- 関数(evaluate, getStudentEvaluation)で処理を整理
- エラーハンドリング(if err != nil)で安全な動作に
- switch文でスコアに応じた評価ロジック
まだまだ、スライスって言葉になれないのと、 funcをdefと書いたり、スライスをstring[]と逆に書いたりでした。 でも、コンパイルがあると助かりますね。
また、:=の書き方に慣れては来ましたが、正式な書き方を忘れないようにしないとなのかな?
今日のまとめ
Go言語7日目のまとめ
- 1週間の復習として、これまでの文法を組み合わせた小さなアプリを作ってみた
- 「データ構造」「関数」「エラー処理」などの理解がつながってきた感触がある
- 文系SEでも、書き方さえわかれば意外と自然に構造化できる!
- 書いてみて初めてわかること、すごく多い。。
(この記事は広告を含みます)