はじめに
本記事は全30ステップで学ぶGolangをテーマにしたGolang学習フローのステップ4です。
この記事へ直接訪問された方は、ぜひ下記の記事を参考に自身の理解度をふまえて学習を開始してみてください。
前回までのあらすじ
前回のステップでは、最初のGoプログラム “Hello, World!” を作成しました。プログラムの基本構造とfmt.Println()
関数の使い方を学びました。今回は、プログラミングの基礎となる変数とデータ型について深く掘り下げていきます。
Go言語の変数とデータ型
Go言語は静的型付け言語です。つまり、各変数には特定のデータ型が関連付けられ、それは変数の宣言時に決定されます。Go言語の変数とデータ型の特徴を見ていきましょう。
またGithubからリポジトリをクローンした方は各項目に記載の sampleX
や exercisesX
がコードとリンクしています。
変数の宣言
Go言語では、変数を宣言するには主に3つの方法があります。
var
キーワードを使用する方法- 短縮変数宣言(
:=
)を使用する方法 - 型を明示的に指定する方法
package main
import "fmt"
func main() {
// 1. varキーワードを使用
var age int
age = 30
// 2. 短縮変数宣言
name := "Gopher"
// 3. 型を明示的に指定
var height float64 = 175.5
fmt.Println("Age:", age)
fmt.Println("Name:", name)
fmt.Println("Height:", height)
}
この例では、3つの異なる方法で変数を宣言しています。Go言語のコンパイラは型推論を行うため、多くの場合、明示的に型を指定する必要はありません。
基本的なデータ型
プログラミングでは保存したいデータ毎、変数に型という物を指定します。
数値を保存したい場合、文字を保存したい場合…etc
数字の箱には文字は入れられず、文字の箱には数字を入れることができません。
プログラミング言語によってこのような型指定を不要とする言語もあります。しかし、厳密には自動的に型が決められているだけなので、他の言語を触ったことがあり「型指定なんてなかった」と思った方はGoでは必要とおぼえておきましょう。
Go言語には以下のような基本的なデータ型があります。
- 整数型:
int
,int8
,int16
,int32
,int64
,uint
,uint8
,uint16
,uint32
,uint64
- 浮動小数点型:
float32
,float64
- 複素数型:
complex64
,complex128
- ブーリアン型:
bool
- 文字列型:
string
package main
import "fmt"
func main() {
var integerNum int = 42
var floatNum float64 = 3.14
var complexNum complex128 = 1 + 2i
var isTrue bool = true
var message string = "Hello, Go!"
fmt.Printf("Integer: %d\n", integerNum)
fmt.Printf("Float: %.2f\n", floatNum)
fmt.Printf("Complex: %v\n", complexNum)
fmt.Printf("Boolean: %t\n", isTrue)
fmt.Printf("String: %s\n", message)
}
この例では、各データ型の変数を宣言し、fmt.Printf()
関数を使用して適切なフォーマット指定子とともに出力しています。
Go言語の特徴:ゼロ値
Go言語では変数宣言時に初期化が行われ、ゼロ値と呼ばれる初期値が設定されます。
Go言語の興味深い特徴の1つは、変数が宣言されたときに自動的に「ゼロ値」が割り当てられることです。これにより、予期せぬ動作や未初期化変数によるエラーを防ぐことができます。
この例を実行すると、各変数のゼロ値が出力されます。
package main
import "fmt"
func main() {
var i int
var f float64
var b bool
var s string
fmt.Printf("int: %v\n", i)
fmt.Printf("float64: %v\n", f)
fmt.Printf("bool: %v\n", b)
fmt.Printf("string: %q\n", s)
}
実践的な演習問題
次の問題に挑戦してみましょう。
ヒント
整数, 浮動小数点, 文字列はなんというデータ型だった?
クリックして答えを見る
package main
func main() {
age := 26
tall := 175.2
name := "最強エンジニア"
fmt.Println(fmt.Sprintf("私は%s。年齢は%dで身長は%fcmです", name, age, tall))
}
整数はint
浮動小数点は float
文字列は string
でしたね。
しかしGoでは型宣言の省略(暗黙の宣言)も可能なので、実は厳密に気にして宣言する必要はあまりありません。
「私の名前は[名前]です。年齢は[年齢]歳で、身長は[身長]cmです。」: exercises2
ヒント
出力に使う関数は、ステップ3で学びましたね!
クリックして答えを見る
package main
import "fmt"
func main() {
age := 26
tall := 175.2
name := "最強エンジニア"
fmt.Printf("私の名前は%sです。年齢は%d歳で、身長は%fcmです。", name, age, tall)
}
fmt.Println
は文字列を出力する関数でしたね。それを書き換えて、名前を出力します。
サンプルと演習問題の動くコードを公開!
Githubにて各ステップのコードを公開しています。cloneして動かしてみたり、手を入れて理解を深めてください。
ぜひStarでの評価をお願いします!
次のステップへのつながり
変数とデータ型の基本を理解したところで、次は演算子と式について学んでいきます。これらの知識を組み合わせることで、より複雑な計算や条件判断を行うプログラムを作成できるようになります。
変数とデータ型は、プログラミングの基礎中の基礎です。これらを十分に理解することで、今後のステップでより複雑な概念を学ぶ際の強固な基盤となります。次のステップでは、これらの変数を使って実際に計算を行う方法を学びます。
【ステップ5】Go言語の基本的な演算子と式