Go言語学習7日目:1週間の復習プログラムを書いてみた。(構造体・マップ・関数・エラー処理を総動員!)

Go言語を学び始めて、ついに1週間が経過しました!

参考にしてきたのは Go Tour(日本語版)

go-tour-jp.appspot.com

そして毎日の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でも、書き方さえわかれば意外と自然に構造化できる!
  • 書いてみて初めてわかること、すごく多い。。

(この記事は広告を含みます)