#3 Goで学ぶ演算子の基本

Goの演算子は、シンプルさを重視するGoらしく、余計な機能を持たないすっきりとした設計になっています。この記事では、Goの基本的な演算子と、他の言語との違いを解説します。

算術演算子・比較演算子

Goでも、なじみのある演算子を使います。

  • + - * / % 算術演算子
  • == != > < 比較演算子
  • && || ! 論理演算子

異なる型同士は計算できない

Goでは、Rustと同様に型の扱いが厳格です。整数型と浮動小数点型の変数を、そのまま計算しようとするとエラーになります。計算したい場合は、明示的に型を変換する必要があります。

var a int = 5
var b float64 = 2.5
result := float64(a) + b

複合代入演算子

「変数に加算してから代入し直す」処理をまとめて書ける複合代入演算子も使えます。

count := 0
count += 1 // count = count + 1 と同じ
count *= 2 // count = count * 2 と同じ

インクリメント演算子の制限

多くの言語には、値を1増やすi++という書き方がありますが、Goにも同様の書き方があります。ただし、Goのi++は「文」として扱われ、他の言語のようにx = i++のような形で式の中に組み込むことはできません。必ず単独の行として書く必要があります。

i := 0
i++
// x := i++ // これはエラーになる

ビット演算子

Goには、ビット単位の計算を行う演算子も用意されています。

  • & ビットごとのAND
  • | ビットごとのOR
  • << >> 左右へのビットシフト

フラグの管理や低レイヤーな処理を書く際に登場しますが、日常的なアプリケーション開発では使う頻度は高くありません。

Goならではの注意点

Goは言語仕様をシンプルに保つという方針のもと、他の言語にある複雑な演算子の使い方(例えば三項演算子など)をあえて採用していません。慣れた言語に三項演算子がある人ほど「Goには無いのか」と驚くことがありますが、これはコードの読みやすさを優先したGoの設計思想によるものです。三項演算子の代わりには、以前の記事で触れたif文をそのまま使うのがGoらしい書き方です。

アドレス演算子&

C++と同じく、Goにも変数のアドレスを取得する&という演算子があります。

age := 20
p := &age
fmt.Println(*p) // pが指す先の値(20)

ただしGoでは、C++のようなポインタ演算(アドレスに数値を足すなど)はできず、安全な範囲での利用に限定されています。

まとめ

Goの演算子は基本的なものに絞られており、シンプルさを重視した設計になっています。型の厳格さとi++の制限を押さえておけば、大きくつまずくことはないでしょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Goをもっと学びたい方には「Go言語入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本