Golang の変数#
1. 変数はプログラムの基本構成単位#
- どの高級プログラミング言語を使用してプログラムを作成する場合でも、変数はそのプログラムの基本構成単位です。
sum,sub は変数です
2. 変数の紹介#
2.1 変数の概念#
変数はメモリ内のデータストレージスペースの表現に相当し、変数を部屋の番号と見なすことができます。部屋の番号を通じて部屋を見つけることができるのと同様に、変数名を通じて変数(値)にアクセスできます。
2.2 変数の使用手順#
- 変数を宣言する(定義とも呼ばれる)
- 非変数に値を代入する
- 変数を使用する
2.3 変数のクイックスタートケース#
出力:
2.4 変数使用時の注意事項#
- 変数はメモリ内のストレージエリアを表します
- このエリアには独自の名前(変数名)と型(データ型)があります
示意図:
- Golang の変数使用の 3 つの方法
-
第一の方法:変数の型を指定し、宣言後に値を代入しない場合はデフォルト値を使用します
-
第二の方法:値に基づいて変数の型を自動的に判断します(型推論)
-
第三の方法:var を省略し、:= の左側の変数はすでに宣言されていない必要があります。そうでないとコンパイルエラーが発生します
-
複数の変数を宣言する
プログラミングでは、時々複数の変数を一度に宣言する必要があります。Golang もこのような構文を提供しています。
どのように一度に複数のグローバル変数を宣言するか【go で関数の外部で変数を定義することはグローバル変数です】:
-
このエリアのデータ値は同じ型の範囲内で変化し続けることができます(重要)
-
同じスコープ内(関数内またはコードブロック内)で変数名を重複させることはできません
-
変数 = 変数名 + 値 + データ型、これに注意してください。変数の三要素です
-
Golang の変数に初期値が代入されていない場合、コンパイラはデフォルト値を使用します。例えば、int のデフォルト値は 0、string のデフォルト値は空文字列、小数のデフォルト値は 0 です。
2.5 変数の宣言、初期化と代入#
2.6 プログラム内での + 記号の使用#
- 左右両側が数値型の場合、加算演算を行います
- 左右両側が文字列の場合、文字列の連結を行います
2.7 データ型の基本紹介#
2.8 整数型#
2.8.1 基本紹介#
簡単に言うと、整数値を保存するためのもので、例えば 0、-1、2345 などです。
2.8.2 整数の各種型#
int の符号なし型:
int の他の型の説明:
2.8.4 整数型の使用細部#
- Golang の各整数型は、符号付きと符号なしに分かれ、int と uint のサイズはシステムに依存します。
- Golang の整数型はデフォルトで int 型として宣言されます
- プログラム内で特定の変数のバイトサイズとデータ型を確認する方法(よく使用されます)
- Golang プログラム内で整数型変数を使用する際は、できるだけ小さいデータ型を使用するという原則を守ります。つまり、プログラムが正しく動作することを保証しつつ、できるだけ小さなスペースを占有するデータ型を使用します。【例:年齢】
- bit: コンピュータ内の最小ストレージ単位。byte: コンピュータ内の基本ストレージ単位。[二進法については後で詳しく説明します] 1byte = 8 bit
2.9 小数型 / 浮動小数点型#
2.9.1 基本紹介#
小数型は小数を保存するためのもので、例えば 1.2、0.23、-1.911 などです。
2.9.2 ケースデモ#
2.9.3 小数型の分類#
上の図の説明:
-
浮動小数点数が機械内に保存される形式についての簡単な説明、浮動小数点数 = 符号ビット + 指数ビット + 尾数ビットの説明:浮動小数点数はすべて符号付きです。
-
尾数部分が失われる可能性があり、精度が損なわれることがあります。 -123.0000901
説明:float64 の精度は float32 よりも正確です。
説明:高精度の数を保存する必要がある場合は、float64 を選択すべきです。 -
浮動小数点型のストレージは 3 つの部分に分かれます:符号ビット + 指数ビット + 尾数ビット。保存プロセス中に精度が失われることがあります。
2.9.4 浮動小数点型の使用細部#
- Golang の浮動小数点型は固定の範囲とフィールド長を持ち、具体的な OS(オペレーティングシステム)の影響を受けません。
- Golang の浮動小数点型はデフォルトで float64 型として宣言されます。
- 浮動小数点型定数には 2 つの表現形式があります
十進数形式:例:5.12 .512(小数点が必要です)
科学的表記形式:例:5.1234e2 = 5.12 * 10 の 2 乗 5.12E-2 = 5.12/10 の 2 乗
- 通常、float64 を使用するべきです。float32 よりも正確です。[開発中は float64 の使用を推奨します]
2.10 文字型#
2.10.1 基本紹介#
Golang には専用の文字型がなく、単一の文字(アルファベット)を保存する場合は一般的に byte を使用します。
文字列は固定長の文字が連結された文字列のシーケンスです。Go の文字列は単一のバイトで構成されています。つまり、従来の文字列は文字で構成されていますが、Go の文字列はバイトで構成されています。
2.10.2 ケースデモ#
上記のコードの説明
- 保存する文字が ASCII 表にある場合、例えば [0-1, a-z,A-Z..] は直接 byte に保存できます。
- 保存する文字のコード値が 255 を超える場合、この時は int 型を使用して保存することを検討できます。
- 文字の形式で出力する必要がある場合、フォーマット出力が必要です。つまり、fmt.Printf (“% c”, c1) などです。
2.10.3 文字型の使用細部#
- 文字定数は単一引用符 ('') で囲まれた単一の文字です。例:var c1 byte = 'a' var c2 int = ' 中 ' var c3 byte = '9'
- Go ではエスケープ文字 '\’を使用して、その後の文字を特殊文字型定数に変換することができます。例:var c3 char = ‘\n’ // '\n' は改行文字を表します
- Go 言語の文字は UTF-8 エンコーディングを使用しています。文字に対応する utf8 コード値を調べたい場合はhttp://www.mytju.com/classcode/tools/encode_utf8.asp
英字 - 1 バイト 漢字 - 3 バイト - Go では、文字の本質は整数であり、直接出力すると、その文字に対応する UTF-8 エンコーディングのコード値が出力されます。
- 特定の変数に数字を直接代入し、フォーマット出力時に % c を使用すると、その数字に対応する unicode 文字が出力されます
- 文字型は演算が可能であり、整数に相当します。なぜなら、それぞれに Unicode コードが対応しているからです。
2.10.4 文字型の本質についての考察#
- 文字型はコンピュータに保存する際、文字に対応するコード値(整数)を見つける必要があります。
保存:文字 ---> 対応コード値 ----> 二進数 --> 保存
読み取り:二進数 ----> コード値 ----> 文字 --> 読み取り - 文字とコード値の対応関係は文字エンコーディングテーブルによって決まります(規定されています)
- Go 言語のエンコーディングはすべて utf-8 に統一されています。非常に便利で統一されており、もはやエンコーディングの文字化けに悩まされることはありません。
2.11 ブール型#
2.11.1 基本紹介#
- ブール型は bool 型とも呼ばれ、bool 型データは true と false の値のみを許可します。
- bool 型は 1 バイトを占めます。
- bool 型は論理演算に適しており、一般的にプログラムのフロー制御に使用されます [注:これは後で詳しく説明します]:
- if 条件制御文;
- for ループ制御文
2.11.2 ケースデモ#
2.12 string 型#
2.12.1 基本紹介#
文字列は固定長の文字が連結された文字列のシーケンスです。Go の文字列は単一のバイトで構成されています。Go 言語の文字列のバイトは UTF-8 エンコーディングで Unicode テキストを識別します。
2.12.2 ケースデモ#
2.12.3 string 使用時の注意事項と細部#
- Go 言語の文字列のバイトは UTF-8 エンコーディングで Unicode テキストを識別します。これにより、Golang は UTF-8 エンコーディングを統一して使用し、中国語の文字化け問題はプログラマーを悩ませることはありません。
- 文字列に一度値が代入されると、文字列は変更できません:Go では文字列は不変です。
- 文字列の 2 つの表現形式
(1) 二重引用符はエスケープ文字を認識します
(2) 逆引用符は文字列の原生形式を出力し、改行や特殊文字を含むことができ、攻撃を防いだり、ソースコードを出力したりする効果を実現できます
【ケースデモ】
- 文字列の連結方法
- 1 行の文字列が長すぎる場合は、複数行の文字列を使用する必要があります。次のように処理できます。
2.13 基本データ型のデフォルト値#
2.13.1 基本紹介#
Go では、データ型にはデフォルト値があり、プログラマーが値を代入しない場合、デフォルト値が保持されます。Go では、デフォルト値はゼロ値とも呼ばれます。
2.13.2 基本データ型のデフォルト値は以下の通りです#
ケース:
2.14 基本データ型の相互変換#
2.14.1 基本紹介#
Golang は Java や C とは異なり、Go では異なる型の変数間で値を代入する際に明示的な変換が必要です。つまり、Golang ではデータ型は自動的に変換されません。
2.14.2 基本構文#
式 T (v) は値 v を型 T に変換します
T: データ型、例えばint32、int64、float32など
v: 変換する必要がある変数
2.14.3 ケースデモ#
3 14 4 基本データ型相互変換の注意事項#
1) Goでは、データ型の変換は表現範囲が小さいものから大きいものへの変換、または範囲が大きいものから小さいものへの変換が可能です。
2) 変換されるのは変数が保存しているデータ(つまり値)であり、変数自体のデータ型は変わりません!
3) 変換中に、例えばint64をint8に変換する場合【-128 - -- 127】、コンパイル時にエラーは発生しませんが、変換結果はオーバーフローとして処理され、期待した結果とは異なります。したがって、変換時には範囲を考慮する必要があります。
2.15 基本データ型と STRING の変換#
2.15.1 基本紹介#
プログラム開発では、基本データ型を string に変換したり、string を基本データ型に変換したりすることがよくあります。
2.15.2 基本型から string 型への変換#
方法 1:fmt.Sprintf ("% パラメータ", 式) 【個人的にはこの方法が柔軟です】
関数の紹介:
パラメータは式のデータ型と一致する必要があります
fmt.Sprintf()..は変換後の文字列を返します
ケースデモ
方法 2:strconv パッケージの関数を使用
ケースの説明
2.15.3 string 型から基本データ型への変換#
使用時に strconv パッケージの関数を使用
ケースデモ
説明
2.15.4 string から基本データ型への変換の注意事項#
string 型を基本データ型に変換する際は、string 型が有効なデータに変換できることを確認する必要があります。例えば、"123" を整数に変換できますが、"hello" を整数に変換することはできません。このようにすると、Golang は直接 0 に変換します。
他の型も同様の理屈です。float=> 0 bool=>false
ケースの説明:
2.16 ポインタ#
2.16.1 基本紹介#
1) 基本データ型では、変数が値を保存します。これを値型と呼びます。
2) 変数のアドレスを取得するには&を使用します。例えば:var num int、numのアドレスを取得するには:&num
基本データ型のメモリレイアウトを分析します。
3) ポインタ型では、ポインタ変数がアドレスを保存し、そのアドレスが指すスペースに値が保存されます。
例えば:var ptr *int = &num
ポインタのメモリレイアウトを説明します。
4) ポインタ型が指す値を取得するには*を使用します。例えば:var ptr *int、*ptrを使用してptrが指す値を取得します。
2.16.2 ケースデモ#
1) プログラムを書いて、int変数numのアドレスを取得し、端末に表示します。
2) numのアドレスをポインタptrに代入し、ptrを通じてnumの値を変更します。
2.16.3 ポインタの使用細部#
- 値型には対応するポインタ型があり、形式はデータ型です。例えば int の対応するポインタはint、float32 の対応するポインタ型は * float32 です。
- 値型には基本データ型 int 系列、float 系列、bool、string、配列、構造体 struct が含まれます。
2.17 値型と参照型#
2.17.1 値型と参照型の説明#
- 値型:基本データ型 int 系列、float 系列、bool、string、配列、構造体 struct
- 参照型:ポインタ、スライス、マップ、チャネル chan、インターフェースなどはすべて参照型です。
2.17.2 値型と参照型の使用特徴#
1) 値型:変数は直接値を保存し、メモリは通常スタックに割り当てられます。
示意図:
2) 参照型:変数はアドレスを保存し、そのアドレスに対応するスペースが実際にデータ(値)を保存します。メモリは通常ヒープに割り当てられます。どの変数もこのアドレスを参照しなくなると、そのアドレスに対応するデータスペースはゴミとなり、GCによって回収されます。
示意図:
3) メモリのスタック領域とヒープ領域の示意図
2.18 識別子の命名規則#
2.18.1 識別子の概念#
1) Golangでは、さまざまな変数、メソッド、関数などの命名に使用される文字列を識別子と呼びます。
2) 自分で名前を付けることができる場所はすべて識別子と呼ばれます。
2.18.2 識別子の命名規則#
1) 26の英字の大文字と小文字、0-9、_で構成されます。
2) 数字で始めることはできません。var num int //ok var 3 num int //error
3) Golangでは大文字と小文字を厳密に区別します。
var num int
var Num int
説明:Golangでは、numとNumは2つの異なる変数です。
4) 識別子には空白を含めることはできません。
5) アンダースコア"_"自体はGoでは特別な識別子であり、空識別子と呼ばれます。他の識別子を表すことができますが、それに対応する値は無視されます(例えば、特定の戻り値を無視する)。したがって、プレースホルダーとしてのみ使用でき、識別子として使用することはできません。
6) システム予約キーワードを識別子として使用することはできません(合計25個)、例えばbreak、ifなど...
2.18.3 識別子のケース#
hello //ok
hello 12 //ok
1 hello //error, 数字で始めることはできません
h-b //error, -を使用することはできません
xh //error, 空白を含むことはできません
h_4 //ok
_ab //ok
int //ok, 皆さんにはこのように使用しないことをお勧めします
float 32 //ok, 皆さんにはこのように使用しないことをお勧めします
_ //error
Abc //ok
2.18.4 識別子命名時の注意事項#
- パッケージ名:package の名前とディレクトリを一致させ、意味のある短いパッケージ名を採用し、標準ライブラリと衝突しないようにします。
2) 変数名、関数名、定数名:キャメルケースを採用します。
例:
var stuName string = “tom” 形式:xxxYyyyyZzzz...
var goodPrice float32 = 1234.5
- 変数名、関数名、定数名の最初の文字が大文字の場合、他のパッケージからアクセスできます。最初の文字が小文字の場合、そのパッケージ内でのみ使用できます(注:簡単に理解すると、最初の文字が大文字は公開されており、小文字はプライベートです)。Golang には public、private などのキーワードはありません。
ケースデモ: