README ¶ A Tour of Go の復習問題 Q1. Goの基礎 の make, new操作 図にで示されている Point Circle Rect を struct を使って定義してください。 また、以下のデータを new して生成し、 fmt.Printf("%#v\n", ...) を使って出力してください。 Px: 100, Py: 50 を持つPoint のデータのポインタ p1 Point: p1, radius: 30 を持つCircle のデータのポインタ c1 Point: p1, width: 20, length: 10 を持つRectのデータのポインタ r1 Q2. フローと関数 の 値渡しと参照渡し を参考に以下の関数を定義してください func NewCircle(p *Point, r int) *Circle 引数で渡された p を Point, r を radius として持つ 新たな Circle のポインタを返す関数 func ExpandCircle(c *Circle, dr int) 引数 c で渡された *Circle の参照する Circle の radius に dr を足す関数 上の2つの関数で引数や戻り値にポインタを使わなかったらどうなるのか説明してください。 これらの関数のテストあるいは動作を確認できるようなmain関数を作成してください。 defer をどのような場合に使うのか例を示して説明してください(ネットで調べても可)。 Q3. オブジェクト指向 この章をすべて読んでください Q2で作成した ExpandCircle を *Circle のメソッド Expand として作り直してください *Rect に面積を求めるメソッド Area() int を追加してください BoxList を参考に 最も大きな面積の Rect (のポインタ) を返すメソッド Biggest を持つ RectList を []*Rect から作成してください。 (ヒント Biggest のレシーバーは RectListのポインタを使いません) Q4. interface この章をすべて読んでください 面積を求めるメソッド Area() float64 を持つinterface Shape を定義してください Rect と Circle を Shape として使えるように変更してください 円の面積は 円周率 * 半径 * 半径 で求められます。円周率は math.Pi で求められます。 最も面積が大きな Shape を返すメソッド Biggest を持つ Shapes を []Shape から作成してください。 引数dxとdy で指定された差分だけ移動する MoveBy メソッドを Shape に追加し Rect と Circle に実装してください。 Shapes に その要素全てに対して MoveBy 呼び出すメソッド MoveBy を実装してください Expand ▾ Collapse ▴ Documentation ¶ There is no documentation for this package. Source Files ¶ View all Source files main.go shape.go Click to show internal directories. Click to hide internal directories.