チュートリアルの翻訳、4回目です。
前回までの訳はチュートリアル[日本語訳]にまとめてありますのでごらんください。


メモリの割り当てについて

Go言語のほとんどの型は値であり、int型、構造体、配列の内容は参照ではなく実体です。
新しく変数を割り当てるにはnew()を使用します。new()は割り当てたメモリへのポインタを返します。 

    type T struct { a, b int }
    var t *T = new(T);

より慣用的な書き方をすると 

    t := new(T);

マップ、スライス、チャネル(後で説明)といった型は、他のオブジェクトへの参照情報を持っています。
スライスやマップの内容を変更すると、その参照先のデータをおなじく参照している別の変数にも影響します。
この3つの型を使うときは、ビルトイン関数のmake()を使います。

    m := make(map[string]int);

上のステートメントは新しいマップを初期化して要素が格納できる状態にします。
マップの宣言だけを行うには次のようにします。  

    var m map[string]int;

上は何も要素を持てないnil参照を作成します。
マップを使用するには、make()を使用して最初に初期化するか、またはすでに作成済みのマップを代入しなければなりません。

new(T)は*Tを返しますが、make(T)はTを返すので注意してください。
new()でオブジェクトの参照を(誤って)割り当ててしまうとnil参照へのポインタが返ります。これは初期化していない変数を作り、そのアドレスを取得したことと同じです。