メモリの動的割り当て

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]

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