変数と定数
Go は静的型付けの言語で、変数の型はコンパイル時に決まります。
変数は宣言してから使います。
すべての変数は型を持ちます。
宣言後に変数の型は変わりません。
1. 変数
1.1. 変数の宣言方法
// 第一种
var age int (string bool 等)
age = 10
// 第二种
var age = 10
// 第三种
age := 10
1.2. パッケージ変数とローカル変数
関数の外で宣言した変数は、パッケージ内で利用できます。
関数内で宣言した変数は、その変数を囲むブロックのスコープに従います。
パッケージ変数は未使用でも構いませんが、未使用のローカル変数はコンパイルエラーになります。
1.3. 複数の変数を宣言する
// 第一种
var user1, user2, user3 string
// 第二种
var user1, user2, user3 = "user1", 1, true
// 第三种
var (
user1 string
user2 int
user3 bool
)
1.4. 注意点
- 利用前に宣言します。
- 代入する値は変数の型に適合する必要があります。
- 同じ宣言スコープで名前を重複させません。
- age := 1 のような短い宣言は、パッケージ直下では使えません。
- 変数には既定のゼロ値があります。
var age int //age默认为0
var name string //name默认为""
var isOk bool //isOk默认为false
- パッケージ変数は未使用でも構いませんが、ローカル変数ではエラーになります。
2. 定数
定数は宣言時に値を指定し、その後は変更できません。
例では区別のため定数名を大文字にしていますが、言語の必須規則ではありません。
2.1. 定数の宣言方法
// 第一种
const PI float32 = 3.1415926 //显示定义
const PI = 3.1415926 //隐式定义
// 之后PI不能改变
PI = 3.1415926 //报错
2.2. まとめて宣言する
まとめて宣言する書き方にも、複数の形式があります。
const(
PI float32 = 3.1415926
PI2 = 'a'
PI3 = 3
)
特殊な例:
cosnt(
x int = 1p
y
s = 'a'
z
m
)

2.3. 注意点
- 定数には真偽値、数値、文字列を使えます。
- 定数は宣言後に使わなくても構いません。
- 型を指定する場合、値はその型で表現できる必要があります。
3、iota
連続する定数値を生成するための特殊な識別子です。
3.1. iota の使い方
//写法1
const (
ERR0 = iota
ERR1 = iota
ERR2 = iota
ERR3 = iota
ERR4 = iota
)
// 输出为:0、1、2、3、4
//写法2
const (
ERR0 = iota
ERR1
ERR2
ERR3
ERR4
)
// 输出也为0、1、2、3、4
iota のカウンタとしての動作を示します。


代入する値にかかわらず、定数の指定が進むごとにカウンタが増えます。
新しい const 宣言では、iota は再び 0 から始まります。
3.2. 注意点
- 式を変更した後、必要に応じて iota を明示し直します。
- iota は連続する型なし整数定数を表します。
- 関連する定数の宣言を簡潔にできます。
- 新しい const 宣言ごとに 0 に戻ります。
4. ブランク識別子
捨てる値にはアンダースコアを使います。未使用変数のエラーにはなりません。
例:var _ int = 10
ブランク識別子は、複数の戻り値の一部を捨てるときなどに使うプレースホルダーです。次に例を示します。
5. 変数のスコープ
5.1. パッケージ変数
関数の外で宣言した変数は、可視性の規則に従ってパッケージ内で利用できます。
5.2. ローカル変数
関数内で宣言した変数は、囲んでいるブロックの範囲に制限されます。
利用時には、この境界を意識する必要があります。
