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などと同じで宣言だけでは、入らないですね。