up:: Go

クラスとオブジェクトの関係性(Go 言語編) オブジェクト指向 - Qiita
Go - メソッドとレシーバ プログラミング - Qiita

goには他言語でいうクラス(データと振る舞いを一纏めにしてカプセル化するやつ)がない。
代わりに構造体(データ)とそれに付与されたメソッド(振る舞い)がある。

構造体はtype句を使って名付けする。

メソッドは関数に「どの構造体に付与するか」の情報がついたもの。
この情報はレシーバと呼ばれ、func句のすぐ後にくっつく。

package main
 
import (
  "fmt"
)
 
type Square struct {
  width  float64
  height float64
}
 
func (s Square) Area() float64 {
  return s.width * s.height
}
 
func main() {
  square := Square{3.0, 4.0}
  fmt.Println(square.Area())
  // output: 12
}

さらにレシーバにはポインタを使うことができる。ポインタレシーバ。
まず先程のレシーバは値レシーバ。コピーされるためもとの値を書き換えない。
ポインタレシーバは直接元の値を書き換える。その分コピーコストがかからず軽い。