2016-03-29 9 views
1

で変数を定義する私は行くの言語を学ぶと変数宣言のこのタイプを見て渡って来ています:ゴープログラミング言語

i:=1; 

しかし、それはGoは静的変数を持っていることを言います。私は、このような何らかの方法で変数を定義する必要があります

var i int=1; 

この2つの方法の違いは何ですか?最初のものでは、データ型を示す必要はありません。それはなぜそうですか?

答えて

3

最初の1つi := 1short variable declarationと呼ばれます。

var IdentifierList = ExpressionList 

あなたはiの種類を指定しませんが、iは、一定のルールに基づいたタイプがあります:初期化子式が、なしのタイプとの定期的なvariable declarationの省略形です。そのタイプは自動的に推測されます。この場合、イニシャライザ式1はデフォルトタイプがintのタイプのない整数定数であるため、型が必要な場合(たとえば、短い変数宣言で使用される場合)、int型が導出されるため、型はintになります。

So Goは静的に型指定されています。つまり、変数には静的型があり、実行時に格納される値は常にその型になります。静的に型指定されているとは、を意味するものではありません。は静的型を明示的に指定する必要があります。つまり、変数は静的型を持つ必要があります。つまり、コンパイル時に決定されます。 。あなたはvarキーワードで変数を宣言する場合は、また、タイプを省略することができます

注:タイプはまた、初期化子式の型から推定されます

var i = 1 

た場合。

Spec: Variable declaration:

タイプが存在する場合、各変数は、その型が与えられます。それ以外の場合は、各変数に代入に対応する初期化値の型が与えられます。その値が型なしの定数の場合は、最初にconvertedからdefault typeになります。タイプされていないブール値の場合は、最初にタイプboolに変換されます。事前宣言された値nilは、明示的な型のない変数を初期化するために使用することはできません。

+0

よろしくお願いします。ありがとう。だからi = 1と1は整数ですので、私はデータ型として整数を取得します。しかし、もう一つの疑問は、それ自体がint型、int16型、int型、64型のサブタイプですか?だから私はここでデフォルトとしてint8を取るだろうか? –

+0

@HariKrishnanこの式は、「1」は**型なしの定数です。式が型指定されていない定数である場合(** **型付き定数でない場合)、**型の**型が使用されます。これは、型指定されていない整数定数の場合は 'int'です。 ** typed **定数が使用されている場合は、明らかに型付き定数の型が使用されます。 – icza

+0

ookk。ありがとう。 :) –

0

Goは使いやすいように設計されています。したがって、新しい変数は、:=演算子を使用して、暗黙の型の右辺を得ることができます。また、たとえば定数1には暗黙の型があります。