Go言語(Golang)は、シンプルでわかりやすい文法が特徴のプログラミング言語です。
その中でも「演算子」は、計算や条件判断、データ操作など、プログラミングのあらゆる場面で使われます。
でも、他のプログラミング言語とはちょっとちがう部分もあって、最初は戸惑うかもしれません。
この記事では、Go言語で使える演算子をわかりやすく一覧にまとめました。
算術演算子

どんなもの?
算術演算子は、数の計算をするときに使う演算子です。
足し算や引き算はもちろん、ビット演算という特別な計算もできます。
演算子の一覧
演算子 | 何をするか | 使い方の例 | 結果の例(a=10, b=3の場合) |
---|---|---|---|
+ | 足し算 | a + b | 13 |
- | 引き算 | a - b | 7 |
* | 掛け算 | a * b | 30 |
/ | 割り算 | a / b | 3 |
% | 余りを求める | a % b | 1 |
& | ビットAND | a & b | 2 |
| | ビットOR | a | b | 11 |
^ | ビットXOR | a ^ b | 9 |
&^ | ビットクリア | a &^ b | 8 |
<< | 左シフト | a << b | 80 |
>> | 右シフト | a >> b | 1 |
ビット演算って何? ビット演算は、数を2進数(0と1だけ)で表したときの計算方法です。プログラミングでは、データを効率的に処理するために使われます。
実際に使ってみよう
package main
import "fmt"
func main() {
a := 10
b := 3
// 基本的な計算
fmt.Println("足し算:", a + b) // 結果: 13
fmt.Println("余り:", a % b) // 結果: 1
// ビット演算
fmt.Println("ビットAND:", a & b) // 結果: 2
}
ここがポイント!
- 割り算(
/
)では、整数同士の場合は小数点以下が切り捨てられます - 余りを求める
%
は、割り切れない時の残りを教えてくれます - ビット演算は最初はむずかしく感じるかもしれませんが、慣れると便利です
比較演算子

どんなもの?
比較演算子は、二つの値を比べて「本当(true)」か「嘘(false)」かを教えてくれる演算子です。
条件分岐やループでよく使われます。
演算子の一覧
演算子 | 何をするか | 使い方の例 | 結果の例(a=5, b=10の場合) |
---|---|---|---|
== | 等しい | a == b | false |
!= | 等しくない | a != b | true |
< | より小さい | a < b | true |
<= | 以下 | a <= b | true |
> | より大きい | a > b | false |
>= | 以上 | a >= b | false |
実際に使ってみよう
package main
import "fmt"
func main() {
a := 5
b := 10
fmt.Println("aはbより小さい?", a < b) // 結果: true
fmt.Println("aとbは同じ?", a == b) // 結果: false
fmt.Println("aはbと違う?", a != b) // 結果: true
}
ここがポイント!
==
は「同じかどうか」を調べます。代入の=
とはちがうので注意!!=
は「ちがうかどうか」を調べます<=
と>=
は、等しい場合も含みます
論理演算子
どんなもの?
論理演算子は、複数の条件を組み合わせたり、条件を反対にしたりするときに使います。
「AかつB」「AまたはB」「Aではない」といった考え方です。
演算子の一覧
演算子 | 何をするか | 使い方の例 | 説明 |
---|---|---|---|
&& | かつ(AND) | a && b | aもbも真のときだけ真 |
| | または(OR) | a | b | aかbのどちらかが真なら真 |
! | ではない(NOT) | !a | aが真なら偽、偽なら真 |
実際に使ってみよう
package main
import "fmt"
func main() {
a := true
b := false
fmt.Println("aかつb:", a && b) // 結果: false
fmt.Println("aまたはb:", a || b) // 結果: true
fmt.Println("aではない:", !a) // 結果: false
}
実用的な例
age := 20
hasLicense := true
// 18歳以上かつ免許を持っている場合
if age >= 18 && hasLicense {
fmt.Println("運転できます")
}
ここがポイント!
&&
は両方が真のときだけ真になります||
はどちらか一方でも真なら真になります!
は真と偽をひっくり返します
代入演算子
どんなもの?
代入演算子は、変数に値を入れたり、すでにある値を変更したりするときに使います。
Go言語では、便利な省略記法もたくさんあります。
演算子の一覧
演算子 | 何をするか | 使い方の例 | 同じ意味 |
---|---|---|---|
= | 代入 | a = b | – |
:= | 宣言と同時に代入 | a := b | var a = b |
+= | 足してから代入 | a += b | a = a + b |
-= | 引いてから代入 | a -= b | a = a – b |
*= | 掛けてから代入 | a *= b | a = a * b |
/= | 割ってから代入 | a /= b | a = a / b |
%= | 余りを求めてから代入 | a %= b | a = a % b |
&= | ビットANDしてから代入 | a &= b | a = a & b |
|= | ビットORしてから代入 | a |= b | a = a | b |
^= | ビットXORしてから代入 | a ^= b | a = a ^ b |
&^= | ビットクリアしてから代入 | a &^= b | a = a &^ b |
<<= | 左シフトしてから代入 | a <<= b | a = a << b |
>>= | 右シフトしてから代入 | a >>= b | a = a >> b |
実際に使ってみよう
package main
import "fmt"
func main() {
// 基本的な代入
a := 5 // 宣言と同時に代入
// 演算してから代入
a += 3 // a = a + 3 と同じ
fmt.Println("a += 3の結果:", a) // 結果: 8
a *= 2 // a = a * 2 と同じ
fmt.Println("a *= 2の結果:", a) // 結果: 16
}
Go言語特有の:=について
// 従来の書き方
var name string = "太郎"
// Go言語の省略記法
name := "太郎" // 型を自動で判断してくれる
ここがポイント!
:=
は新しい変数を作るときだけ使えます+=
、-=
などは、計算と代入を一度にできて便利です- コードが短くなって、読みやすくなります
アドレス演算子(ポインタ)

どんなもの?
アドレス演算子は、コンピュータのメモリ上で変数がどこにあるかを扱う演算子です。ポインタという機能を使って、より効率的なプログラミングができます。
演算子の一覧
演算子 | 何をするか | 使い方の例 | 説明 |
---|---|---|---|
& | アドレスを取得する(アドレス演算子) | p := &a | 変数aのメモリ上の住所を取得 |
* | ポインタが指す値を取得する(デリファレンス) | value = *p | ポインタpが指している値を取得 |
実際に使ってみよう
package main
import "fmt"
func main() {
// 普通の変数
a := 10
fmt.Println("aの値:", a)
// aのアドレス(住所)を取得
p := &a
fmt.Println("aのアドレス:", p)
// ポインタが指している値を取得
fmt.Println("ポインタが指す値:", *p) // 結果: 10
// ポインタ経由で値を変更
*p = 20
fmt.Println("変更後のaの値:", a) // 結果: 20
}
実用的な例:関数での値の変更
package main
import "fmt"
// 値を直接変更する関数
func changeValue(p *int) {
*p = 100
}
func main() {
num := 50
fmt.Println("変更前:", num) // 結果: 50
changeValue(&num) // numのアドレスを渡す
fmt.Println("変更後:", num) // 結果: 100
}
ここがポイント!
&
は「住所を教えて」という意味*
は「その住所にある値を教えて」という意味- ポインタを使うと、関数の中からでも元の変数を変更できます
- 大きなデータを扱うときにメモリを節約できます
レシーブ演算子(チャネル)
どんなもの?
レシーブ演算子は、Go言語特有のチャネルという機能で使います。
チャネルは、異なる処理の間でデータをやり取りするための仕組みです。
演算子の一覧
演算子 | 何をするか | 使い方の例 | 説明 |
---|---|---|---|
<- | チャネルから値を受信 | value := <-ch | チャネルchから値を受け取る |
<- | チャネルに値を送信 | ch <- value | チャネルchに値を送る |
実際に使ってみよう
package main
import "fmt"
func main() {
// チャネルを作る
ch := make(chan int)
// 別の処理で値を送信
go func() {
ch <- 42 // チャネルに42を送る
}()
// チャネルから値を受信
value := <-ch // チャネルから値を受け取る
fmt.Println("受信した値:", value) // 結果: 42
}
より実用的な例
package main
import (
"fmt"
"time"
)
func worker(name string, ch chan string) {
time.Sleep(1 * time.Second) // 1秒待つ
ch <- fmt.Sprintf("%sの作業完了", name)
}
func main() {
ch := make(chan string)
// 3つの作業を同時に開始
go worker("作業A", ch)
go worker("作業B", ch)
go worker("作業C", ch)
// 3つの結果を受信
for i := 0; i < 3; i++ {
result := <-ch
fmt.Println(result)
}
}
ここがポイント!
<-
の向きに注目:ch <-
は送信、<- ch
は受信- チャネルを使うと、複数の処理を同時に実行できます
- Go言語の並行処理の核となる機能です
演算子の優先順位

どんなもの?
演算子の優先順位とは、複数の演算子が一緒に使われたときに、どれから先に計算するかを決める順番のことです。
算数の「掛け算・割り算は足し算・引き算より先」と同じ考え方です。
優先順位の一覧(高い順)
優先順位 | 演算子 | 覚え方 |
---|---|---|
5 | * / % << >> & &^ | 掛け算・割り算・ビット演算 |
4 | + - | ^ | 足し算・引き算 |
3 | == != < <= > >= | 比較 |
2 | && | かつ(AND) |
1 | || | または(OR) |
実際の例で確認
package main
import "fmt"
func main() {
// 掛け算が先に計算される
result1 := 2 + 3 * 4
fmt.Println("2 + 3 * 4 =", result1) // 結果: 14 (2 + 12)
// 比較がかつ(&&)より先に計算される
a := 5
b := 10
result2 := a < b && b > 3
fmt.Println("a < b && b > 3 =", result2) // 結果: true
// 括弧を使って順序を明確にする
result3 := (2 + 3) * 4
fmt.Println("(2 + 3) * 4 =", result3) // 結果: 20
}
ここがポイント!
- 優先順位が高い演算子ほど先に計算されます
- わからないときは括弧
()
を使って順序を明確にしましょう - コードを読む人にとっても、括弧があると理解しやすくなります
まとめ
Go言語の演算子は、プログラムを作るうえでとても大切な要素です。それぞれの特徴をまとめてみましょう:
- 算術演算子:計算やビット操作に使います。基本的な四則演算から、コンピュータならではのビット演算まで幅広く対応しています。
- 比較演算子:値の大きさや等しさを調べます。条件分岐やループ処理で頻繁に使われる重要な演算子です。
- 論理演算子:複数の条件を組み合わせるときに使います。「かつ」「または」「ではない」の3つを覚えておけば大丈夫です。
- 代入演算子:変数に値を入れたり更新したりします。Go言語の
:=
や+=
などの省略記法を使うと、コードがすっきりします。 - アドレス演算子:ポインタを使った効率的なプログラミングができます。最初はむずかしく感じるかもしれませんが、慣れると便利です。
- レシーブ演算子:Go言語特有のチャネル機能で使います。並行処理プログラムを作るときに欠かせません。
- 演算子の優先順位:複雑な計算式でも正しく処理できるよう、順序を理解しておきましょう。
これらの演算子をマスターすることで、Go言語でのプログラミングがもっと楽しく、効率的になります。
最初はすべてを覚える必要はありません。よく使うものから少しずつ慣れていきましょう!
コメント