#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿