導入
Go言語を学び始めると、最初に出会う演算子が「+」です。しかし、この「+」は単なる足し算のためだけの記号ではありません。数値計算と文字列操作という、全く異なる二つの役割を担っています。この挙動を曖昧に理解していると、型変換のミスでコンパイルエラーに悩まされたり、意図しないデータ型を扱ってしまう原因になります。本記事では、実務で必須となる「+」演算子の挙動と、型安全な実装方法について解説します。
基礎知識
「+」演算子は、オペランド(演算対象)の型によって動作が切り替わります。数値型(int, float64など)の間であれば「算術加算」として機能し、文字列型(string)の間であれば「文字列連結」として機能します。
重要な点は、Go言語は型に対して非常に厳格な言語であるということです。他のスクリプト言語のように「数値と文字列を直接『+』で繋ぐ」ことはできません。例えば、`”Score: ” + 100` と記述すると、コンパイルエラーが発生します。この仕様は、意図しない型変換によるバグを未然に防ぐための重要な設計です。
実装/解決策
実務で数値と文字列を組み合わせたい場合は、`fmt.Sprintf`関数や`strconv`パッケージを使用して、明示的に型を変換する必要があります。また、大量の文字列を「+」で結合し続けると、メモリ上に新しい文字列が都度生成されるため、高負荷な処理では`strings.Builder`の使用が推奨されます。
サンプルプログラム
以下のコードは、数値演算と文字列結合、そして型変換の実装例です。
package main
import (
“fmt”
“strconv”
“strings”
)
func main() {
// 1. 数値の加算
sum := 10 + 20
fmt.Printf(“数値の計算結果: %d\n”, sum)
// 2. 文字列の結合
hello := “Hello, ”
world := “World!”
message := hello + world
fmt.Println(“文字列の結合結果:”, message)
// 3. 数値と文字列を組み合わせる方法(strconvを使用)
score := 95
// 文字列に変換してから結合する
result := “スコアは” + strconv.Itoa(score) + “点です。”
fmt.Println(result)
// 4. 【応用】大量の文字列結合はstrings.Builderを使うのがベストプラクティス
var builder strings.Builder
builder.WriteString(“Go”)
builder.WriteString(“言語”)
builder.WriteString(“の”)
builder.WriteString(“学習”)
fmt.Println(“効率的な結合結果:”, builder.String())
}
応用・注意点
現場で「+」演算子を使用する際に注意すべき点は以下の3つです。
1. 型の一致: `int`と`int64`など、同じ数値型でもサイズが異なれば「+」演算子は使えません。必ずキャスト(例: `int64(a) + b`)が必要です。
2. ゼロ値の確認: 算術演算を行う際、変数が初期化されているか確認してください。Goの数値型のゼロ値は`0`ですが、ポインタ型の場合、nilのまま演算を行うとパニックが発生します。
3. パフォーマンス: ループ内で`s = s + “a”`のように「+」演算子を繰り返すと、新しい文字列を毎回アロケートするためメモリ効率が悪化します。文字列の結合頻度が高い場合は、必ず`strings.Builder`を活用しましょう。
これらを押さえることで、堅牢で効率的なGoコードを書くことができます。

コメント