構造体へのメソッド定義
CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 7/107。
Go の method は、関数を struct type に関連付ける特別な レシーバ 引数を持つ関数です。
メソッド構文
func (receiverName StructType) MethodName() ReturnType {
// メソッド本体
}メソッドを持つ構造体を定義する
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func (r Rectangle) Perimeter() float64 {
return 2 * (r.Width + r.Height)
}パラメーターを持つメソッド
func (r Rectangle) Scale(factor float64) float64 {
return r.Area() * factor
}メソッドの呼び出し
rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area()) // 出力: 15
fmt.Println(rect.Perimeter()) // 出力: 16
fmt.Println(rect.Scale(2)) // 出力: 30レシーバー (r Rectangle) を使うと、レシーバー変数 r を使用してメソッド内の構造体のフィールドにアクセスできます。メソッドは同じ構造体上の他のメソッドを呼び出すことができます。
チャレンジ
中級Circle struct に3つのメソッドを追加します:
Area:math.Pi * radius * radiusを returnsCircumference:2 * math.Pi * radiusを returnsDescribe:string"Circle with radius X.XX"を returns
自分で試してみよう
package main
import "fmt"
func main() {
var radius float64
fmt.Scan(&radius)
c := Circle{Radius: radius}
fmt.Printf("Area: %.2f\n", c.Area())
fmt.Printf("Circumference: %.2f\n", c.Circumference())
fmt.Printf("Description: %s\n", c.Describe())
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
1Go オブジェクト指向の基礎
外部ファイルGo ワークスペースとモジュールパッケージとインポート公開された名前と非公開の名前Go におけるオブジェクト指向入門クラスとしての構造体構造体へのメソッド定義ポインタレシーバと値レシーバ構造体の初期化コンストラクタ関数まとめ:簡易計算機8エラー処理とOOP
error インターフェースカスタムエラー型エラーラッピング (fmt.Errorf)センチネルエラーerrors.Is() と errors.As()Panic、Defer、Recover復習 - ファイルパーサー自分で練習してみよう: Goオンラインコンパイラ