new
関数は、動的にメモリを割り当ててそのアドレス、つまりポインタを返す。
var 変数名 *型 = new(型)
例を示そう。
package main import "fmt" func main() { var p *int = new(int) var q *float64 = new(float64) var a *[8]int = new([8]int) fmt.Println(p) fmt.Println(*p) fmt.Println(q) fmt.Println(*q) fmt.Println(a) fmt.Println(*a) *p = 100 *q = 1.2345 a[0] = 10 a[7] = 80 fmt.Println(*p) fmt.Println(*q) fmt.Println(*a) }
^o^ > go run dynamic_alloc.go 0xc042008210 0 0xc042008218 0 &[0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] 100 1.2345 [10 0 0 0 0 0 0 80]
本題と関係ないけど、配列(と、たぶんスライスも)を指すポインタから要素へのアクセスは *
をつけなくてできるんだな。