Go言語の基礎となる文法や操作を、20のコード例に分けて詳しく解説
コード例 1: "Hello, World!"プログラム**
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
解説:
この最初の例では、Go言語の基本的なプログラムである「Hello, World!」を作成します。このプログラムを通じて、Goの基本的な構造と文法について説明します。
-
package main
- パッケージ宣言: Goのすべてのファイルはパッケージから始まります。
main
パッケージ: 特別な名前で、実行可能なプログラムを示します。他の名前を使うと、そのパッケージはライブラリとして機能します。
-
import "fmt"
- パッケージのインポート: 必要な標準ライブラリや外部パッケージを取り込むために
import
を使用します。 "fmt"
パッケージ: 文字列のフォーマットやコンソールへの出力を行うための標準ライブラリです。
- パッケージのインポート: 必要な標準ライブラリや外部パッケージを取り込むために
-
func main() { ... }
- 関数定義:
func
キーワードで関数を定義します。 main
関数: プログラムのエントリーポイントとなる特別な関数です。
- 関数定義:
-
fmt.Println("Hello, World!")
- 関数呼び出し:
fmt
パッケージ内のPrintln
関数を呼び出しています。 - 出力:
"Hello, World!"
という文字列をコンソールに出力し、最後に改行します。
- 関数呼び出し:
ポイント解説:
-
パッケージとモジュールシステム
Goではコードをパッケージ単位で管理します。
package main
と宣言することで、そのファイルが実行可能なプログラムの一部であることを示します。 -
インポート文
必要な機能を持つパッケージを
import
文で取り込みます。複数のパッケージをインポートする場合は、括弧を使って以下のように書きます:import (
"fmt"
"os"
) -
関数の基本構造
関数は
func
キーワードで定義し、名前、パラメータ、戻り値を指定します。main
関数は特別なもので、パラメータや戻り値を持ちません。 -
標準ライブラリの活用
fmt
パッケージはフォーマット済みの入出力を提供します。Println
関数は引数を文字列として表示し、最後に改行します。
実行方法:
-
上記のコードを
hello.go
というファイル名で保存します。 -
ターミナル(コマンドプロンプト)でファイルのあるディレクトリに移動します。
-
以下のコマンドを実行してプログラムを実行します:
go run hello.go
-
コンソールに
Hello, World!
と表示されれば成功です。
まとめ:
この例では、Go言語の基本的なプログラム構造と、コンソールへの文字列出力方法を学びました。これらはGoプログラミングの基礎となる重要な概念です。次の例では、変数の宣言やデータ型について詳しく見ていきます。
コード例 2: 変数の宣言と基本データ型
package main
import "fmt"
func main() {
// 明示的な型指定による変数宣言
var age int = 30
var name string = "太郎"
var height float64 = 170.5
var isStudent bool = true
// 型推論による変数宣言
var weight = 65.0
// 短縮宣言(:=)による変数宣言
city := "東京"
fmt.Println("名前:", name)
fmt.Println("年齢:", age)
fmt.Println("身長:", height)
fmt.Println("体重:", weight)
fmt.Println("学生ですか?", isStudent)
fmt.Println("都市:", city)
}
解説:
このコード例では、Go言語における変数の宣言方法と基本的なデータ型の使い方を学びます。変数の宣言にはいくつかの方法があり、それぞれの特徴を理解することが重要です。
-
明示的な型指定による変数宣言
var age int = 30
var name string = "太郎"
var height float64 = 170.5
var isStudent bool = truevar
キーワード: 変数を宣言するために使用します。- データ型の指定:
int
、string
、float64
、bool
などの基本データ型を明示的に指定します。 - 初期化:
=
を使って変数に値を代入します。
-
型推論による変数宣言
var weight = 65.0
- 型の省略: 値を代入する際にデータ型を省略すると、Goが自動的に型を推論します。
- この例では:
65.0
は小数点を含むため、float64
型として推論されます。
-
短縮宣言(
:=
)による変数宣言city := "東京"
:=
演算子: 変数の宣言と初期化を同時に行います。- 注意点: 関数内でのみ使用可能です。関数外では
var
を使う必要があります。 - 型推論: 値からデータ型を自動的に推論します。
-
値の出力
fmt.Println("名前:", name)
// 他の変数も同様に出力fmt.Println
関数: 複数の引数を受け取り、スペースで区切って表示します。- 文字列と変数の組み合わせ: 文字列リテラルと 変数をカンマで区切って渡します。
ポイント解説:
-
基本データ型
- 整数型:
int
,int8
,int16
,int32
,int64
- 浮動小数点型:
float32
,float64
- 文字列型:
string
- ブール型:
bool
- 整数型:
-
変数宣言の方法
-
明示的な型指定と初期化
var 変数名 型 = 初期値
-
型推論による宣言
var 変数名 = 初期値
- データ型を省略すると、初期値から型が推論されます。
-
短縮宣言(関数内のみ)
変数名 := 初期値
var
キーワードやデータ型を省略できます。- 関数内でのみ使用可能。
-
-
複数の変数を同時に宣言
var a, b, c int = 1, 2, 3
x, y := 10.5, "文字列" -
デフォルト値
- 変数を宣言しただけで初期化しない場合、自動的にデフォルト値が設定されます。
- 数値型:
0
または0.0
- 文字列型:
""
(空文字) - ブール型:
false
- 数値型:
- 変数を宣言しただけで初期化しない場合、自動的にデフォルト値が設定されます。
実行方法:
-
上記のコードを
variables.go
というファイル名で保存します。 -
ターミナルでファイルのあるディレクトリに移動します。
-
以下のコマンドを実行してプログラムを実行します:
go run variables.go
-
以下のような出力が得られます:
名前: 太郎
年齢: 30
身長: 170.5
体重: 65
学生ですか? true
都市: 東京
まとめ:
この例では、Go言語における変数の宣言方法と基本データ型について学びました。変数の宣言には複数の方法があり、状況に応じて使い分けることが重要です。また、データ型を理解することで、プログラム内で適切な操作を行うことができます。次の例では、定数の宣言と使用方法について詳しく見ていきます。
コード例 3: 定数の宣言と使用
package main
import "fmt"
func main() {
// 定数の宣言
const pi float64 = 3.14159
const name = "ゴーランゲージ"
// 複数の定数をまとめて宣言
const (
a = 1
b = 2
c = 3
)
// iotaを使用した列挙型のような定数
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
fmt.Println("円周率:", pi)
fmt.Println("言語名:", name)
fmt.Println("定数a, b, c:", a, b, c)
fmt.Println("曜日:", Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
}
解説:
このコード例では、Go言語における定数の宣言方法と、その使用法について学びます。定数はプログラム内で変更されない値を表し、データの不変性を保証するために使用します。
-
基本的な定数の宣言
const pi float64 = 3.14159
const name = "ゴーランゲージ"const
キーワード: 定数を宣言するために使用します。- データ型の指定: 必要に応じてデータ型を明示できますが、省略も可能です。
- 初期化: 定数は宣言時に必ず初期化が必要です。
-
複数の定数をまとめて宣言
const (
a = 1
b = 2
c = 3
)- 括弧
()
を使用: 複数の定数をグループ化 して宣言できます。 - コードの整理: 関連する定数をまとめることで、コードの可読性が向上します。
- 括弧
-
iota
を使用した連続値の定数const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)iota
: 定数宣言内で使われる特殊な識別子で、行番号を0から自動的に割り当てます。- 連続した値の割り当て: 列挙型のように連続した整数値を定数に割り当てるのに便利です。
- 自動インクリメント:
iota
は各行で自動的にインクリメントされます。
-
値の出力
fmt.Println("円周率:", pi)
// 他の定数も同様に出力fmt.Println
関数: 変数と同様に、定数の値も出力できます。
ポイント解説:
-
定数の特徴
- 変更不可: 定数は一度宣言すると、その値を変更することはできません。
- 型推論: 変数と同様に、初期値からデータ型を推論できます。
-
iota
の活用-
連番の生成: 列挙型やビットフラグの定義に便利です。
-
計算可能:
iota
を使って計算した値を定数に割り当てることもできます。const (
_ = iota // 0(使わない値はアンダースコアに割り当て)
KB = 1 << (10 * iota) // 1 << 10
MB // 1 << 20
GB // 1 << 30
)
-
-
定数の型
- 明示的な型指定: 必要に応じてデータ型を明示できます。
- 暗黙的な型指定: 型を省略すると、使用される場面で適切な型に解釈されます。
-
定数と変数の違い
- 再代入の可否: 変数は値を変更できますが、定数は変更できません。
- 宣言時の初期化: 定数は宣言と同時に初期化が必要ですが、変数は初期化を省略可能です(その場合デフォルト値が入ります)。
実行方法:
-
上記のコードを
constants.go
というファイル名で保存します。 -
ターミナルでファイルのあるディレクトリに移動します。
-
以下のコマンドを実行してプログラムを実行します:
go run constants.go
-
以下のような出力が得られます:
円周率: 3.14159
言語名: ゴーランゲージ
定数a, b, c: 1 2 3
曜日: 0 1 2 3 4 5 6
まとめ:
この例では、Go言語における定数の宣言方法とiota
の使い方について学びました。定数はプログラム内で不変の値を扱う際に重要であり、iota
を活用することで連続した値を簡潔に定義できます。次の例では、基本的な演算子と式の使い方について詳しく見ていきます。
コード例 4: 基本的な演算子と式の使い方
package main
import "fmt"
func main() {
// 算術演算子
a := 10
b := 3
sum := a + b // 加算
diff := a - b // 減算
prod := a * b // 乗算
quot := a / b // 除算(整数の場合、商のみ)
rem := a % b // 剰余
// 浮動小数点数での除算
x := 10.0
y := 3.0
floatQuot := x / y // 浮動小数点数の除算
// 関係演算子(比較演算子)
isEqual := (a == b)
isNotEqual := (a != b)
isGreater := (a > b)
isLessOrEqual := (a <= b)
// 論理演算子
boolA := true
boolB := false
andResult := boolA && boolB // AND演算
orResult := boolA || boolB // OR演算
notResult := !boolA // NOT演算
// 出力
fmt.Println("算術演算子の結果:")
fmt.Println("sum:", sum)
fmt.Println("diff:", diff)
fmt.Println("prod:", prod)
fmt.Println("quot:", quot)
fmt.Println("rem:", rem)
fmt.Println("floatQuot:", floatQuot)
fmt.Println("\n関係演算子の結果:")
fmt.Println("isEqual:", isEqual)
fmt.Println("isNotEqual:", isNotEqual)
fmt.Println("isGreater:", isGreater)
fmt.Println("isLessOrEqual:", isLessOrEqual)
fmt.Println("\n論理演算子の結果:")
fmt.Println("andResult:", andResult)
fmt.Println("orResult:", orResult)
fmt.Println("notResult:", notResult)
}
解説:
このコード例では、Go言語における基本的な演算子の使い方と、それらを用いた式の評価方法について学びます。算術演算子、関係演算子、論理演算子の3種類を中心に解説します。
-
算術演算子
a := 10
b := 3
sum := a + b // 加算
diff := a - b // 減算
prod := a * b // 乗算
quot := a / b // 除算
rem := a % b // 剰余+
(加算): 2つの値を足し合わせます。-
(減算): 左の値から右の値を引きます。*
(乗算): 2つの値を掛け合わせます。/
(除算): 左の値を右の値で割ります。整数同士の除算では商のみが得られます。%
(剰余): 左の値を右の値で割った余りを求めます。
浮動小数点数での除算
x := 10.0
y := 3.0
floatQuot := x / y- 浮動小数点数同士の除算では、結果も浮動小数点数となり、小数部分も得られます。
-
関係演算子(比較演算子)
isEqual := (a == b) // 等しいか
isNotEqual := (a != b) // 等しくないか
isGreater := (a > b) // 大きいか
isLessOrEqual := (a <= b) // 小さいかまたは等しいか==
(等しい): 左右の値が等しければtrue
。!=
(等しくない): 左右の値が等しくなければtrue
。>
(大きい): 左の値が右の値より大きければtrue
。<
(小さい): 左の値が右の値より小さければtrue
。>=
(大きいか等しい): 左の値が右の値以上であればtrue
。<=
(小さいか等しい): 左の値が右の値以下であればtrue
。
-
論理演算子
boolA := true
boolB := false
andResult := boolA && boolB // 論理積(AND)
orResult := boolA || boolB // 論理和(OR)
notResult := !boolA // 否定(NOT)&&
(AND): 両方の値がtrue
の場合にtrue
。||
(OR): どちらかの値がtrue
の場合にtrue
。!
(NOT): 値を反転します。true
はfalse
に、false
はtrue
に。
-
結果の出力
fmt.Println("算術演算子の結果:")
fmt.Println("sum:", sum)
// 他の結果も同様に出力- 各演算の結果をコンソールに出力します。
ポイント解説:
-
整数と浮動小数点数の違い
- 整数同士の除算では、結果も整数となり、小数部分は切り捨てられます。
- 浮動小数点数を用いることで、小数部分を含む精度の高い計算が可能です。
-
型の混在に注意
-
異なるデータ型同士(例えば
int
とfloat64
)で演算を行うとエラーになります。 -
必要に応じて型変換を行います。
var a int = 10
var b float64 = 3.0
result := float64(a) / b
-
-
優先順位
-
演算子には優先順位があります。必要に応じて
()
を使って明示的に順序を指定します。result := (a + b) * c
-
-
ブール型
- 論理演算子はブール値(
true
またはfalse
)に対して使用します。 - 条件分岐やループでの条件判定に利用されます。
- 論理演算子はブール値(
実行方法:
-
上記のコードを
operators.go
というファイル名で保存します。 -
ターミナルでファイルのあるディレクトリに移動します。
-
以下のコマンドを実行してプログラムを実行します:
go run operators.go