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

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

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

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

スポンサーリンク

背景

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

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

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

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

ブートストラップ(Bootstrapping)

現在の実装は、ブートストラップ中に有用ないくつかの組み込み関数を提供する。これらの関数は完全性のために文書化されているが、言語に残り続けることは保証されない。結果を返さない。

関数        動作

print      すべての引数を出力する。引数のフォーマットは実装依存
println    print と同様だが、引数の間にスペースを、末尾に改行を出力する

実装上の制限:printprintln は任意の引数型を受け付ける必要はないが、真偽値型、数値型、および文字列型の出力はサポートされなければならない。


解説

print と println ってなに?

printprintln は、Go に最初から組み込まれているデバッグ用の出力関数です。

print("hello ")
print(42)
print("\n")

println("hello", 42, true)

fmt.Println との違い

普段使う fmt.Println とは異なる点がいくつかあります。

// fmt.Println:標準出力(stdout)に出力
fmt.Println("hello")

// println:標準エラー(stderr)に出力
println("hello")
fmt.Printlnprintln
出力先stdoutstderr
パッケージfmt のインポートが必要インポート不要
フォーマット豊富なフォーマット対応実装依存
引数の型任意の型基本型のみ保証
将来性安定将来削除される可能性あり

使うべき場面

原文が「言語に残り続けることは保証されない」と述べているとおり、print/println は本番コードで使うべきではありません。

使ってよい場面は以下に限られます。

Go のランタイム自体の開発

// Go コンパイラやランタイムのデバッグ
// fmt パッケージがまだ使えない初期化段階で使う
print("runtime: initializing\n")

これが「ブートストラップ」という節名の由来です。Go のコンパイラやランタイムを構築する段階では、標準ライブラリがまだ使えないことがあります。そのような状況でも出力できるよう、言語レベルで組み込まれています。

一時的なデバッグ

// ちょっとした動作確認(import を書くのが面倒なとき)
println("debug:", x, y)
// 確認が終わったら削除して fmt.Println に置き換える

import 文を追加せずにサッと出力できるので、一時的なデバッグでは便利です。ただし、コードレビューに出す前に必ず fmt.Println に置き換えましょう。

おわりに 

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

よっしー
よっしー

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

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

コメント

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