Closed3

Go の基本を抑えていく

Kota HashihamaKota Hashihama

Go におけるポインタとは

型情報+メモリアドレス

a := 1
b := &a
fmt.Printf("型情報: %T アドレス/: %p", b, b)
型情報: *int /アドレス: 0xc00001e060

【Goのやさしい記事】Goのポインタとか値渡しとか参照渡しを5分で学ぼう - Qiita

ポインタのメリット

通常、引数で関数にオブジェクトを渡す場合は値渡し(コピー)となるが、ポインタで渡すようにすれば関数へ参照渡しとしてオブジェクトを渡すことができる

参照渡しでは

  1. 「その」オブジェクトを渡すので関数内で値を直接加工できる
  2. 値をコピーするコストがかからない
    そのため、構造体は参照渡しが推奨されている

Golang ポインタを用いることのメリット - Qiita

Kota HashihamaKota Hashihama

メソッドの定義の仕方

メソッド

type Person struct {
  Name string
  Age  int
}

func (p Person) greet() {
  fmt.Println("私は" + p.Name + "で" + strconv.Itoa(p.Age) + "歳です。")
}

func main() {
  p := Person{Name: "幸太", Age: 10}
  p.greet()
私は幸太で10歳です。

greet() { の前にある (p Person) をレシーバという

通常の関数

type Person struct {
  Name string
  Age  int
}

func greet(p Person) {
  fmt.Println("私は" + p.Name + "で" + strconv.Itoa(p.Age) + "歳です。")
}

func main() {
  p := Person{Name: "幸太", Age: 10}
  greet(p)
}
Kota HashihamaKota Hashihama

フォーマッター

gofmt が標準のフォーマッター
goimports を使うと、 gofmt のコード整形に加え、パッケージを必要に応じて追加・削除・並び替えしてくれる

このスクラップは2022/11/06にクローズされました