Go言語は「静的型付け」
今まではスクリプト言語しか話題にしてきませんでしたので「動的型付け」ばかりでしたが、Go言語は「静的型付け」です。
静的型付けと動的型付けを簡単に説明しますと、変数の型を手動で決めるか自動で決めるかの違いです。
Pythonでしたら、変数 a というものの中に下のように何でも代入できます。
a = “文字列”
a = 123
a = 3.14
a = True
print(a) # True
Go言語でしたら、一行目でエラーになります。
変数の定義
Go言語で a = “文字列” にしたければ、まず a を定義します。
定義の仕方は、変数名 スペース 型名で定義します。
var a string
定義の後でしたら、値を代入できます。
a = “文字列”
定義と同時に代入もできます。
var a string = “文字列”
varを付けて最初から値を代入すれば型を省略できます。
var a = “文字列”
関数内に限っては、varを省略して下のように書けます。
a := “文字列”
上のように、コロンとイコールで代入することを「暗黙的な型宣言」と言うそうです。
Pythonなどのスクリプト言語に比べて、Go言語は変数の定義に型を意識しないといけないので面倒ですが、プログラムを実行してから型を特定するスクリプト言語よりも処理スピードが速くなります。
※処理スピードの他に開発のスピードやメンテナンスのやり易さなど全体のコストを考えて言語を選ぶのがいいようです。簡単なプログラムはスクリプト言語で作成する方が効率が良いです。
主な「型」
ゼロ値とは、変数を定義したがまだ何も代入していない段階で入っている値です。
- string
- 文字列です。ゼロ値は””です。
- int
- 小数点のない数値です。ゼロ値は0です。
- float64
- 小数点のある数値です。ゼロ値は0です。
- bool
- ブール型です。真(true)と偽(false)という2値をとるデータ型です。ゼロ値はfalseです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
package main import ( "fmt" ) /* ひとつずつvarをつけてもいいですが、 var a bool = false var b string = "こんんちは" var c int = 123 var d float64 = 3.14 */ //var()内にまとめることもできる var ( //ブール型の変数に代入 a bool = false //文字列型の変数に代入 b string = "こんにちは" //int型(小数点のない数値)の変数に代入 c int = 123 //小数点型の変数に代入 d float64 = 3.14 ) func main() { //関数内ではデータ型を指定しない、暗黙的な型宣言が可能 f := "「%v」のデータ型は%T\n" fmt.Printf(f, a, a) //「false」のデータ型はbool fmt.Printf(f, b, b) //「こんにちは」のデータ型はstring fmt.Printf(f, c, c) //「123」のデータ型はint fmt.Printf(f, d, d) //「3.14」のデータ型はfloat64 //違う値を代入 a = true b = "おはよう" c = 456 d = 1.08 fmt.Printf(f, a, a) //「true」のデータ型はbool fmt.Printf(f, b, b) //「おはよう」のデータ型はstring fmt.Printf(f, c, c) //「456」のデータ型はint fmt.Printf(f, d, d) //「1.08」のデータ型はfloat64 } |
Printf関数
Printf は、指定されたフォーマットに従ってフォーマットを行い、出力します。
上の例では 変数 f に “「%v」のデータ型は%T\n” という文字列が代入されていますので、
fmt.Printf(f, a, a) は fmt.Printf(“「%v」のデータ型は%T\n”, a, a) となります。
%v はデフォルトフォーマットを適用した値
%T は値の型
fmt.Printf(“「%v」のデータ型は%T\n”, a, a)
カンマの後にa,aという同じ変数を指定して、最初は%vに対応させ、次のaは%Tに対応させて出力しています。
\nは改行を意味します。
フォーマットの書式化記号の例は http://golang.jp/pkg/fmt を参考にして下さい。