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]
本題と関係ないけど、配列(と、たぶんスライスも)を指すポインタから要素へのアクセスは * をつけなくてできるんだな。