2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Go】 make と new の違い

Last updated at Posted at 2024-11-07

Go言語では、データを初期化するためにmakenewという2つの異なる関数が用意されています。これらは似たような役割を持つように見えますが、実際には異なる目的と使用方法があります。

1. new関数

  • 基本的な役割: newは任意の型のゼロ値を持つポインタを生成します。
  • 使い方: 例えば、new(int)とすると、整数型のゼロ値(0)を持つポインタが作成されます。
  • 具体例:
    var num *int = new(int)  // int型のポインタを作成
    fmt.Println(*num)        // 0が出力される
    *num = 42                // ポインタを通じて値を変更
    fmt.Println(*num)        // 42が出力される
    

2. make関数

  • 基本的な役割: makeはスライス、マップ、チャネルを初期化するために使用されます。これらのデータ構造には内部状態があり、makeを使うことでそれらを正しくセットアップできます。
  • 使い方: 例えば、make([]int, 5)とすると、5つの要素を持つ整数型スライスが作成されます。
  • 具体例:
    slice := make([]int, 5)  // 5つの要素を持つスライスを作成
    fmt.Println(slice)        // [0 0 0 0 0]が出力される
    slice[0] = 10             // スライスの要素を変更
    fmt.Println(slice)        // [10 0 0 0 0]が出力される
    

3. makenewの違いまとめ

特徴 new make
目的 任意の型のゼロ値ポインタを生成する スライス、マップ、チャネルを初期化する
返り値 ポインタ(ゼロ値を持つ) 初期化されたデータ構造
使用例 new(int) make([]int, 5)

まとめ

  • newを使う場合: 自分が作成した構造体や基本的なデータ型のポインタを扱いたいとき。
  • makeを使う場合: スライス、マップ、チャネルのような内部状態を持つデータ構造を初期化したいとき。
2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?