Go言語学習も6日目に突入しました!
今日のテーマは、昨日に引き続き エラーハンドリング。
そして、関数の書き方・使い方をちょっと応用してみる日です!
参考にしているのは、毎度おなじみ Go Tourのリンクはこちら。
今日も30分、少しずつ理解を深めていきます!!!
「複数の値を返す関数」+「エラー処理」ってどう書くの?
これまでにも出てきたこの形:
func divide(a, b float64) (float64, error) { if b == 0 { return 0, errors.New("0で割ることはできません") } return a / b, nil }
Goではこういう 「値+error」 で返すのが超基本とのこと。
result, err := divide(10, 0) if err != nil { fmt.Println("エラー:", err) } else { fmt.Println("結果:", result) }
この「if err != nil
パターン」に慣れておくことが超大事なんですよね。。
練習①:合計&平均を同時に返す関数(スライス活用)
func sumAndAverage(numbers []int) (int, float64, error) { if len(numbers) == 0 { return 0, 0, errors.New("空のスライスでは計算できません") } sum := 0 for _, n := range numbers { sum += n } avg := float64(sum) / float64(len(numbers)) return sum, avg, nil } func main() { nums := []int{10, 20, 30, 40, 50} sum, avg, err := sumAndAverage(nums) if err != nil { fmt.Println("エラー:", err) return } fmt.Printf("合計: %d, 平均: %.2f\n", sum, avg) }
- 戻り値が3つ(int, float64, error)でも全然OK!
- error を最後に置くのがGoの書き方ルール
- スライスの長さチェックでエラーを返すのが丁寧な書き方
関数の使い方も少しずつ「部品化」していけると、読みやすくて再利用しやすいコードに近づいていく気がします。。
練習②:指定した数の偶数だけをスライスにして返す
ちょっとした処理を関数にまとめてみました👇
func filterEven(numbers []int) ([]int, error) { if len(numbers) == 0 { return nil, errors.New("空のスライスです") } var evens []int for _, n := range numbers { if n%2 == 0 { evens = append(evens, n) } } if len(evens) == 0 { return nil, errors.New("偶数が見つかりませんでした") } return evens, nil } func main() { nums := []int{1, 3, 5, 7, 8} evens, err := filterEven(nums) if err != nil { fmt.Println("エラー:", err) } else { fmt.Println("偶数:", evens) } }
「ちょっとした処理でも関数に分けてみる」ことが、Goに慣れる第一歩!
今日のまとめ
Go言語6日目の学習ポイントまとめ
func xxx(...) (値, error)
の形式に慣れてきた!- 複数の値(合計・平均など)を同時に返す関数も簡単に書ける
- 「エラーが出そうな条件は先にチェックする」書き方が丁寧
- 小さな処理でも関数化して、読みやすいコードを目指そう
いやぁ、トライキャッチに任せないで、自分で常にエラーをnilでも返すと思うと、チームの人によってはtryを書かない人もいるからいいかも。 構文で縛るというのは。
(この記事は広告を含みます)