1
0

Go言語(Golang)ポインタを使うべき時と、使うべきでない時

Last updated at Posted at 2024-09-16

ポインタを使うべき時

  1. データの変更が必要な場合:

    • 関数やメソッド内で引数のデータを変更したいとき
  2. 大きなデータ構造:

    • 大きなデータを関数に渡すときに、コピーを避けてメモリを節約したいとき
  3. 共有する必要がある場合:

    • 複数の関数やメソッドで同じデータを扱いたいとき
  4. nil チェックの必要がある場合:

    • 値が存在しないことを示すために nil を使いたいとき

例:データを変更する関数

main.go
package main

import "fmt"

type User struct {
    Name string
}

func UpdateName(user *User, newName string) {
    user.Name = newName
}

func main() {
    user := User{Name: "Alice"}
    fmt.Println("Before:", user.Name)
    
    UpdateName(&user, "Bob")
    fmt.Println("After:", user.Name)
}
  • ポイント: UpdateName 関数で UserName を変更しています。ポインタを使うことで、元のデータを直接変更できます。

ポインタを使うべきでない時

  1. データの変更が不要な場合:

    • 関数やメソッドがデータを変更しないことが明確なとき
  2. 安全性を重視する場合:

    • データが誤って変更されるのを防ぎたいとき
  3. 小さなデータ構造:

    • 基本的な型や小さな構造体はコピーしてもパフォーマンスに影響が少ないため、ポインタを使わなくても良い

例:データを変更しない関数

package main

import "fmt"

type User struct {
    Name string
}

func PrintName(user User) {
    fmt.Println("User Name:", user.Name)
}

func main() {
    user := User{Name: "Alice"}
    PrintName(user)
}
  • ポイント: PrintName 関数ではデータを変更しないため、ポインタを使わずに値を渡しています。データのコピーが作られますが、変更の必要がないので問題ありません

ポインタを使うか使わないかの決定の基準

  • 目的: データを変更する必要があるか
  • サイズ: データが大きいか小さいか
  • 安全性: データの不変性を保ちたいか
  • パフォーマンス: メモリと速度を最適化する必要があるか
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0