0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Goにおけるnewと宣言のみの違い

Posted at

newで初期化することとvarで宣言する違い

newで初期化

newで初期化すると以下のようなコードになります。

var i *int = new(int)

これを出力すると

package main

import "fmt"

func main() {
	var i *int = new(int)
    //もしくはi := new(int)
	fmt.Printf("%T %v\n", i, *i) → *int 0
}

となってnewではポインタ型を返します。

構造体だったりはポインタで使用されることが多いのでnewを使うことが多い。

type Vertex struct{
  X,Y int
}
....
v := new(Vertex)
//v := &Vertex{}と同じ

varで宣言のみ

varで宣言すると以下のようなコードになります。

var i2 *int

これを出力すると

package main

import "fmt"

func main() {
	var i2 *int
	fmt.Printf("%T\n", i2) → *int
	fmt.Println(i2) → <nil>
}

となり、nil値となる。

javaなどと同じで宣言だけでは、入らないですね。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?