Go-variables
Go-変数
変数は、プログラムが操作できるストレージ領域に付けられた名前に他なりません。 Goの各変数には特定のタイプがあり、変数のメモリのサイズとレイアウト、そのメモリ内に格納できる値の範囲、および変数に適用できる操作のセットを決定します。
変数の名前は、文字、数字、およびアンダースコア文字で構成できます。 文字またはアンダースコアで始まる必要があります。 Goでは大文字と小文字が区別されるため、大文字と小文字は区別されます。 前の章で説明した基本タイプに基づいて、次の基本変数タイプがあります-
Sr.No | Type & Description |
---|---|
1 |
byte 通常、単一のオクテット(1バイト)。 これはバイト型です。 |
2 |
int マシンの整数の最も自然なサイズ。 |
3 |
float32 単精度浮動小数点値。 |
Goプログラミング言語では、列挙、ポインター、配列、構造、およびユニオンなど、他のさまざまなタイプの変数を定義することもできます。これについては、以降の章で説明します。 この章では、基本的な変数タイプのみに焦点を当てます。
Goの変数定義
変数定義は、変数用に作成するストレージの場所と量をコンパイラーに指示します。 変数の定義は、データ型を指定し、次のようにその型の1つ以上の変数のリストが含まれています-
var variable_list optional_data_type;
ここで、 optional_data_type は、byte、int、float32、complex64、boolean、または任意のユーザー定義オブジェクトなどを含む有効なGoデータ型であり、 variable_list はコンマで区切られた1つ以上の識別子名で構成されます。 いくつかの有効な宣言がここに示されています-
var i, j, k int;
var c, ch byte;
var f, salary float32;
d = 42;
ステートメント*“ var i、j、k;” *は、変数i、j、およびkを宣言および定義します。これは、タイプintのi、j、およびkという名前の変数を作成するようコンパイラーに指示します。
変数は、宣言で初期化(初期値を割り当て)できます。 変数のタイプは、渡された値に基づいてコンパイラーによって自動的に判断されます。 初期化子は、等号とそれに続く定数式で構成されます-
variable_name = value;
例えば、
d = 3, f = 5; //declaration of d and f. Here d and f are int
初期化子なしの定義の場合:静的ストレージ期間を持つ変数は、nilで暗黙的に初期化されます(すべてのバイトの値は0です)。他のすべての変数の初期値は、そのデータ型のゼロ値です。
Goでの静的型宣言
静的な型変数宣言は、指定された型と名前で使用可能な変数が1つあることをコンパイラに保証するため、コンパイラは変数の完全な詳細を必要とせずにさらにコンパイルを進めることができます。 変数宣言はコンパイル時にのみ意味を持ち、コンパイラはプログラムのリンク時に実際の変数宣言を必要とします。
例
変数が型で宣言され、メイン関数内で初期化されている次の例を試してください-
package main
import "fmt"
func main() {
var x float64
x = 20.0
fmt.Println(x)
fmt.Printf("x is of type %T\n", x)
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
20
x is of type float64
Goでの動的型宣言/型推論
動的な型変数の宣言では、渡された値に基づいてコンパイラが変数の型を解釈する必要があります。 コンパイラーは、必要な要件として静的に型を持つ変数を必要としません。
例
変数が型なしで宣言されている次の例を試してください。 型推論の場合、変数 y を:=演算子で初期化したのに対し、 x は=演算子を使用して初期化されます。
package main
import "fmt"
func main() {
var x float64 = 20.0
y := 42
fmt.Println(x)
fmt.Println(y)
fmt.Printf("x is of type %T\n", x)
fmt.Printf("y is of type %T\n", y)
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
20
42
x is of type float64
y is of type int
Goの混合変数宣言
型推論を使用して、さまざまな型の変数を一度に宣言できます。
例
package main
import "fmt"
func main() {
var a, b, c = 3, 4, "foo"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Printf("a is of type %T\n", a)
fmt.Printf("b is of type %T\n", b)
fmt.Printf("c is of type %T\n", c)
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
3
4
foo
a is of type int
b is of type int
c is of type string
Goの左辺値と右辺値
Goには2種類の式があります-
- lvalue -メモリ位置を参照する式は「lvalue」式と呼ばれます。 左辺値は、割り当ての左辺または右辺として表示される場合があります。
- rvalue -rvalueという用語は、メモリ内のあるアドレスに格納されているデータ値を指します。 右辺値は、値を割り当てることができない式です。つまり、右辺に割り当てることができますが、割り当ての左側ではありません。
変数は左辺値であるため、割り当ての左側に表示される場合があります。 数値リテラルは右辺値であるため、割り当てられない可能性があり、左側に表示できません。
次の文は有効です-
x = 20.0
次の文は無効です。 それはコンパイル時エラーを生成します-
10 = 20