2016-08-11 5 views
-1

私はこのチュートリアルをやっていますが、私はこのエクササイズについて質問しました。https://tour.golang.org/moretypes/5チュートリアル:この行の&は何ですか?

私は簡単なCコードで簡単にポインタとアドレスで作業しました。私の理解は、p = &Vertex{1, 2} // has type *Vertexという行が新しい変数pをアドレスVertexに向けているということです。

が、これはその後、ここでX, Y int = 1, 2

を設定するstructの定義を再定義することはないでしょうチュートリアルからの完全なコードです:

package main 

import "fmt" 

type Vertex struct { 
    X, Y int 
} 

var (
    v1 = Vertex{1, 2} // has type Vertex 
    v2 = Vertex{X: 1} // Y:0 is implicit 
    v3 = Vertex{}  // X:0 and Y:0 
    p = &Vertex{1, 2} // has type *Vertex 
) 

func main() { 
    fmt.Println(v1, p, v2, v3) 
} 

答えて

1

var p = &Vertex{1, 2}は、次のことを行います。

  • Vertexの匿名変数を作成し、 の値を1にしますy
  • ための3210及び図2は、
  • セットp匿名変数を指すようにタイプ*VertexVertexへのポインタ )の可変p作成します。

タイプの定義には影響しません。

+0

ok私は匿名の可変部分が欠けていました。好奇心のために、この匿名変数にアクセスする方法はありますか?これを行う実践的なアプリケーションは何ですか? – deltaskelta

+1

ポインタでのみアクセスできます。状況が特定の型へのポインタを必要とするときに、これが行われることがよくあります。例えば、パッケージは、型の初期化されたインスタンスへのポインタを返す 'New()'関数を定義するかもしれません。これは 'return&MyType {field1:val1、field2:val2}'のようなもので行うことができます。 –

+1

私が参照した使用方法の詳細:https://golang.org/doc/effective_go.html#composite_literals –

関連する問題