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

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

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

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

スポンサーリンク

背景

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

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

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

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

組み込み関数(Built-in functions)

組み込み関数は事前宣言されている。他の関数と同様に呼び出されるが、一部は最初の引数として式ではなく型を受け付ける。

組み込み関数は標準の Go の型を持たないため、呼び出し式にのみ現れることができる。関数値として使用することはできない。


解説

組み込み関数ってなに?

組み込み関数は、Go に最初から用意されている特別な関数です。import なしでどこでも使えます。

len("hello")           // 5
make([]int, 10)         // 長さ10のスライスを作成
append(s, 1, 2, 3)     // スライスに要素を追加

普通の関数との違い

組み込み関数には、ユーザーが定義する関数にはない特別な性質が2つあります。

1. 引数に「型」を取れるものがある

make([]int, 10)     // 第1引数は []int という「型」
new(Point)          // 引数は Point という「型」

普通の関数は値しか引数に取れませんが、makenew は型そのものを引数として受け取ります。これは Go の通常の型システムでは表現できない特別な機能です。

2. 関数値として扱えない

f := len        // コンパイルエラー! len を変数に代入できない
f := fmt.Println // OK! 普通の関数は変数に代入できる

組み込み関数は「標準の Go の型を持たない」ので、変数に代入したり、他の関数に引数として渡したりできません。呼び出す以外の使い方はできないということです。

// 普通の関数なら渡せる
apply(fmt.Println, "hello")

// 組み込み関数は渡せない
// apply(len, "hello")  // コンパイルエラー!

// ラッパーを作れば回避できる
myLen := func(s string) int { return len(s) }
apply(myLen, "hello")  // OK

組み込み関数の一覧

Go の組み込み関数は以下のとおりです。後続の節でそれぞれ詳しく説明されます。

// サイズ・容量の取得
len(v)          // 長さ
cap(v)          // 容量

// コレクションの操作
append(s, ...)  // スライスへの追加
copy(dst, src)  // スライスのコピー
clear(v)        // スライスやmapのクリア
delete(m, key)  // mapからの削除

// メモリ確保
make(T, ...)    // スライス、map、チャネルの作成
new(T)          // ゼロ値へのポインタの作成

// 複素数
complex(r, i)   // 複素数の作成
real(c)         // 実部の取得
imag(c)         // 虚部の取得

// 型関連
min(x, ...)     // 最小値(Go 1.21)
max(x, ...)     // 最大値(Go 1.21)

// エラー処理
panic(v)        // パニックの発生
recover()       // パニックの回復

// 出力(デバッグ用)
print(...)      // 標準エラーへの出力
println(...)    // 標準エラーへの出力(改行つき)

これらが「式文で使えない」組み込み関数(lencapappend など)と、使える組み込み関数(panicprint など)に分かれていたのは、前に学んだ式文の節で説明されたとおりです。副作用のない関数は、戻り値を捨てて呼ぶのがバグの可能性が高いため、式文として使うことが禁止されています。

おわりに 

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

よっしー
よっしー

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

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

コメント

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