まとめ:カスタムデータ構造
CoddyのGOジャーニー「基礎」セクションの一部 — レッスン 101/109。
チャレンジ
簡単Goの構造体について学んだことを復習するために、シンプルなカスタムデータ構造を作成しましょう。
このチャレンジでは、以下のことができる基本的な Counter データ構造を作成します:
- カウント値を追跡する
- カウントをインクリメント(増加)する
- カウントをデクリメント(減少)する
- カウントをゼロにリセットする
Counter 構造体の不足しているメソッドを実装して、コードを完成させてください。
自分で試してみよう
package main
import (
"fmt"
)
// Counter はシンプルなカウンターのデータ構造です
type Counter struct {
value int
name string
}
// NewCounter は指定された名前で新しいカウンターを作成します
func NewCounter(name string) Counter {
return Counter{
value: 0,
name: name,
}
}
// Increment はカウンターを 1 増やします
func (c *Counter) Increment() {
// カウンターの値を増やすコードを追加してください
}
// Decrement はカウンターを 1 減らします(ただし 0 未満にはなりません)
func (c *Counter) Decrement() {
// カウンターの値を減らすコードを追加してください
// 値が 0 未満にならないようにしてください
}
// Reset はカウンターを 0 に戻します
func (c *Counter) Reset() {
// カウンターを 0 にリセットするコードを追加してください
}
// Value は現在のカウントを返します
func (c Counter) Value() int {
// 現在の値を返すコードを追加してください
return 0 // これを置き換えてください
}
// String はカウンターの文字列表現を返します
func (c Counter) String() string {
return fmt.Sprintf("%s: %d", c.name, c.value)
}
func main() {
// "Visitors" という名前の新しいカウンターを作成します
visitors := NewCounter("Visitors")
// カウンターを数回増やします
visitors.Increment()
visitors.Increment()
visitors.Increment()
// 現在のカウントを表示します
fmt.Println(visitors)
fmt.Println("Current value:", visitors.Value())
// カウンターを減らします
visitors.Decrement()
fmt.Println(visitors)
// カウンターをリセットします
visitors.Reset()
fmt.Println(visitors)
// カウンターが 0 未満にならないことをテストします
visitors.Decrement()
fmt.Println(visitors)
}