はじめに
本記事は全30ステップで学ぶGolangをテーマにしたGolang学習フローのステップ5です。
この記事へ直接訪問された方は、ぜひ下記の記事を参考に自身の理解度をふまえて学習を開始してみてください。
前回までのあらすじ
前回のステップでは、Go言語の変数とデータ型について学びました。変数の宣言方法、基本的なデータ型(整数、浮動小数点数、文字列、ブーリアン)、そして型推論について理解を深めました。今回は、これらの変数を使って演算を行う方法を学んでいきます。
【ステップ4】Go言語の変数とデータ型Go言語の演算子
Go言語には、他のプログラミング言語と同様に、様々な演算子が用意されています。これらの演算子を使うことで、変数や値を操作し、新しい値を生成することができます。
またGithubからリポジトリをクローンした方は各項目に記載の sampleX
や exercisesX
がコードとリンクしています。
1. 算術演算子
算術演算子は数値を操作するために使用します。
+
(加算)-
(減算)*
(乗算)/
(除算)%
(剰余)
簡単な四則演算と剰余についてみてみましょう。
それぞれ10と3という数字に対して計算してみます。
package main
import "fmt"
func main() {
a := 10
b := 3
fmt.Println("加算:", a + b)
fmt.Println("減算:", a - b)
fmt.Println("乗算:", a * b)
fmt.Println("除算:", a / b)
fmt.Println("剰余:", a % b)
}
結果は当然ながらこうなります。
加算: 13
減算: 7
乗算: 30
除算: 3
剰余: 1
注意: 整数同士の除算は、結果も整数になります(小数点以下は切り捨てられます)。
2. 比較演算子
比較演算子は、二つの値を比較し、真偽値(true
またはfalse
)を返します。
==
(等しい)!=
(等しくない)<
(より小さい)>
(より大きい)<=
(以下)>=
(以上)
簡単な比較式とその結果を確認してみましょう。
package main
import "fmt"
func main() {
x := 5
y := 10
fmt.Println("x == y:", x == y)
fmt.Println("x != y:", x != y)
fmt.Println("x < y:", x < y)
fmt.Println("x > y:", x > y)
fmt.Println("x <= y:", x <= y)
fmt.Println("x >= y:", x >= y)
}
結果はこうなります。
x == y: false
x != y: true
x < y: true
x > y: false
x <= y: true
x >= y: false
3. 論理演算子
論理演算子は、ブーリアン値を操作するために使用します。
&&
(論理AND)||
(論理OR)!
(論理NOT)
簡単な論理式とその結果を確認してみましょう。
package main
import "fmt"
func main() {
a := true
b := false
fmt.Println("a && b:", a && b)
fmt.Println("a || b:", a || b)
fmt.Println("!a:", !a)
}
結果はこうなります。
a && b: false
a || b: true
!a: false
4. 代入演算子
Go言語には、演算と代入を同時に行う複合代入演算子があります。
+=
(加算して代入)-=
(減算して代入)*=
(乗算して代入)/=
(除算して代入)%=
(剰余を代入)
簡単な代入式とその結果を確認してみましょう。
package main
import "fmt"
func main() {
x := 10
x += 5
fmt.Println("x += 5:", x)
x -= 3
fmt.Println("x -= 3:", x)
x *= 2
fmt.Println("x *= 2:", x)
x /= 4
fmt.Println("x /= 4:", x)
x %= 3
fmt.Println("x %= 3:", x)
}
結果はこうなります。
x += 5: 15
x -= 3: 12
x *= 2: 24
x /= 4: 6
x %= 3: 0
Go言語特有の演算子
Go言語には、他の言語にはない特殊な演算子もあります。
1. アドレス演算子(&)とデリファレンス演算子(*)
これらの演算子はポインタ操作に使用されます。詳細は後のステップで学びます。
Go言語のつまづきポイントです。
2. チャネル受信演算子(<-)
この演算子は並行プログラミングで使用され、チャネルからデータを受信します。これも後のステップで詳しく学びます。
実践的な演習問題
・変換式は C = (F - 32) * 5/9
です。
C=摂氏, F=華氏
クリックして答えを見る
package main
import "fmt"
func main() {
f := 77
fmt.Println("f=", f, " c:", (f-32)*5/9)
}
華氏を摂氏へ変換する式は記述の通りなので、残りは摂氏を計算する、出力する…etc簡単ですね!
閏年の条件は下記の通りです。
- 4で割り切れる年は閏年
- ただし、100で割り切れる年は閏年ではない
- ただし、400で割り切れる年は閏年
クリックして答えを見る
package main
import "fmt"
func main() {
year := 2024
r4 := year % 4
r100 := year % 100
r400 := year % 400
if r4 == 0 {
if r100 != 0 && r400 == 0 {
fmt.Println("閏年です")
return
}
}
fmt.Println("閏年ではありません")
}
このぐらい条件が増えると、プログラムの書き方が大幅に増えるので、答えは一例です。
実際に2000, 2004, 2100といったパターンを用意して動作確認をしてみましょう。
サンプルと演習問題の動くコードを公開!
Githubにて各ステップのコードを公開しています。cloneして動かしてみたり、手を入れて理解を深めてください。
ぜひStarでの評価をお願いします!
次のステップへのつながり
演算子と式の基本を理解したことで、より複雑なプログラムを書く準備が整いました。次のステップでは、標準入出力の扱い方について学びます。これにより、ユーザーからの入力を受け取り、結果を出力する対話的なプログラムを作成できるようになります。
【ステップ6】Go言語でのコンソールからの入力と出力