Go言語入門:言語仕様 -Vol.89-

スポンサーリンク
Go言語入門:言語仕様 -Vol.89- 用語解説
Go言語入門:言語仕様 -Vol.89-
この記事は約3分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

本日は、Go言語の言語仕様について解説しています。

スポンサーリンク

背景

Go言語を学び始めて、公式の「The Go Programming Language Specification(言語仕様書)」を開いてみたものの、「英語で書かれていて読むのが大変…」「専門用語ばかりで何を言っているのかわからない…」と感じたことはありませんか? 実は、多くのGo初心者が同じ壁にぶつかっています。

言語仕様書は、Go言語の「正式な取扱説明書」のような存在です。プログラミング言語がどのように動くのか、どんなルールで書くべきなのかが詳しく書かれていますが、その分、初めて読む人には難しく感じられるのも事実です。

そこでこの記事では、言語仕様書の導入部分を丁寧な日本語訳とともに、初心者の方でも理解しやすい補足説明を加えてお届けします。「強く型付けされている」「ガベージコレクション」「並行プログラミング」といった専門用語も、具体例を交えながらわかりやすく解説していきます。

言語仕様書は難しそうに見えますが、一つひとつの概念を丁寧に読み解いていけば、必ず理解できます。一緒に、Go言語の基礎をしっかり学んでいきましょう!

文字列の連結(String concatenation)

文字列は + 演算子または += 代入演算子を使って連結できる:

s := "hi" + string(c)
s += " and good bye"

文字列の加算は、オペランドを連結して新しい文字列を作成する。


解説

文字列の連結は + で書ける

Go では文字列の連結に + を使います。他の言語でもおなじみの書き方ですね。

first := "Hello"
second := "World"
greeting := first + " " + second  // "Hello World"

+= を使えば、既存の文字列に追記する形でも書けます。

s := "Hello"
s += " World"   // s は "Hello World" になる

「新しい文字列を作成する」の意味

原文の最後の一文が大事です。Go の文字列は不変(イミュータブル)なので、+ で連結するたびにまったく新しい文字列がメモリ上に作られます。元の文字列は変更されません。

a := "Hello"
b := a + " World"
// a はそのまま "Hello"
// b は新しく作られた "Hello World"

大量の連結には注意

前回の算術演算子の解説でも触れましたが、ループ内で ++= を繰り返すと、毎回新しい文字列が作られるためパフォーマンスが悪化します。

// 遅い:n 回の連結で n 個の文字列が作られる
s := ""
for i := 0; i < 10000; i++ {
    s += "a"
}

// 速い:内部バッファに追記するだけ
var b strings.Builder
for i := 0; i < 10000; i++ {
    b.WriteString("a")
}
s := b.String()

目安として、ループの外で数回連結する程度なら + で十分です。ループ内で何度も連結する場合は strings.Builder を使いましょう。

おわりに 

本日は、Go言語の言語仕様について解説しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました