Go/文法の概要
Hello World

Goでは、ソースファイルの冒頭に package 文があります。これに続いて import 文があります。
Hello World

プログラムの開始点は、エントリーポイントと呼ばれます。 Goでは、エントリーポイントは「main パッケージの main関数」と決まっています。
Hello World

関数は、プログラム内で再利用可能なコードのブロックを表します。
Hello World

Goは静的型付けのプログラミング言語であり、変数を使用する前に必ず宣言する必要があります。Goの変数には、以下のような特徴があります。
Hello World

Goにおける定数は、実行時に変更できない値のことを指します。変数と異なり、定数は宣言時に初期化する必要があります。 定数の宣言には const キーワードを使用します。定数の命名規則は変数と同様で、アルファベットまたはアンダースコアで始まり、その後に数字や文字列を含むことができます。
Hello World

import, var, const の宣言は ( ) でグループ化できます。
Hello World

Go言語には、以下のような演算子があります。
Hello World

算術演算子は、数値型の値の加算、減算、乗算、除算、剰余を行います。 比較演算子は、二つの値の比較を行い、真偽値を返します。 論理演算子は、論理値のAND、OR、NOT演算を行います。 ビット演算子は、整数型の値のビット毎のAND、OR、XOR、左シフト、右シフト、ビットクリア演算を行います。 代入演算子は、左辺の変数に右辺の値を代入し、その後演算を行います。
Hello World

また、Goには以下のような演算子もあります。
Hello World

アドレス演算子は、変数のアドレスを取得します。 ポインタ演算子は、ポインタの指す先の値を参照します。 参照演算子は、構造体やインターフェイスのメンバーにアクセスするために使用します。
Hello World

これらの演算子を組み合わせることで、複雑な演算が可能になります。
Hello World

Goの構文要素には文・式・演算子があり、代入は文に分類されます。C言語系の言語では代入は式に分類されますが、Goでは異なります。
Hello World

代入が文であることにより、a = b = 42; の様な代入はできず、if文などの構造構文の条件式で代入はできません。 このことで、右結合であるか左結合であるかへの配慮を必要とする状況を劇的に少なくなりました。
Hello World

C言語系のプログラムには、n++ という構文があります。これは、変数nに1を足すことを表します。C言語系の言語では、この構文は式として扱われますが、Go言語では文として扱われます。 Go言語のインクリメント文は、後置インクリメントのみが存在します。これは、変数に1を足すことを意味します。式ではないため、インクリメントと値の参照の順序について心配する必要はありません。 Go言語でインクリメントを行う方法は、C言語系のプログラムと似ていますが、細かい点では異なる点があります。これらの違いを理解して、Go言語を使用する際には注意してコードを書く必要があります。
Hello World

選択文には、if文とswitch文とselect文があります。
Hello World

これだけだと「C言語と同じアレか」と思われるでしょうが、Goでは、
Hello World

のように条件式を囲むカッコが要らず { } が必須です(擬似コードではなく、動くプログラムの一部です)。また、
Hello World

のように、条件式の前に「単純な文」を置くことができ、とりわけ上の例のように「短い変数宣言」で宣言された変数はif文スコープになります。
Hello World

Goの反復文はfor文だけです。これもC言語とは異なる文法で
Hello World

このように、Goの構文や意味論はC言語やC++、あるいはJavaとは大きく異なるため、ユーザーには事前にC言語などの知識が必要ありません。逆に、C言語ファミリーのプログラマーは、同じキーワードが別の意味を持つことが多く、常にその違いを意識する必要があるため、転換教育には頭の切り替えが必要です。
Hello World

一方、JavaScriptなどのスクリプト言語の経験者は、自動的にセミコロンが挿入されるなど、馴染みの深い文法機能に親近感を持つかもしれません(JSからC/C++への転換教育では、このような機能が1つの大きなハードルになることがあります)。
Hello World

構文は異なるものの、制約のある文法という点では、PythonとGoは近いものがあります。
Hello World

は
Hello World

また、Goには三項演算子 a ? b : c もありません。
Hello World

このように、同じロジックを書くと大きな差異を生じないよう慎重に言語設計がなされています。
Hello World

Go言語には、オブジェクト指向言語におけるクラス概念がありませんが、型に対してメソッドを定義することができます。具体的には、構造体を定義してその構造体に関数を紐付けることで、メソッドを定義することができます。
Hello World

つぎの例では、 Abs メソッドは cmplx という名前の Complex 型のレシーバを持つことを意味しています。
Hello World

また、Goはインターフェース型を持ちます。インターフェース型はインターフェース (interface) と呼ばれるメソッド集合を指定する機能で、クラス階層における継承の機能を受け持ちます(アプローチは全く異なります)。
Hello World

また、入れ子の構造体の入れ子側の構造体(埋め込み構造体)のフィールドは、埋め込み親のフィールドの構文で参照できるので、継承的な使い勝手を提供します。
Hello World

インターフェースの例として、以下のような Shape インターフェースを定義し、Rectangle 構造体と Circle 構造体に Shape インターフェースを実装する例を示します。
Hello World

また、埋め込み構造体の例として、以下のような Person 構造体と Employee 構造体を定義し、Employee 構造体に Person 構造体を埋め込む例を示します。
Hello World

Employee 構造体に Person 構造体を埋め込むことで、Employee 構造体は Person 構造体のフィールドにアクセスできるようになります。Introduce メソッドは Person 構造体のメソッドであるため、Employee 構造体でも使用できます。
Hello World

Goでは、 // から行末までがコメントになります。 また、/*と*/で複数行に渡るコメントを書くこともできます。
Hello World

Go Doc Comment は、パッケージ、変数、関数、メソッドなどの説明を記述するコメントです。これらのコメントは godoc ツールによって抽出され、Goのドキュメントを生成するために使用されます。
Hello World

Go Doc Comment は、// または /* */ のいずれかで記述できます。// を使用する場合は、コメントを上に書き、/* */ を使用する場合は、コメントを左側に書きます。
Hello World

以下は、パッケージと関数の Go Doc Comment の例です。
Hello World

Go Doc Comment には、以下のようなルールがあります。
Hello World

Go Doc Comment は、パッケージのドキュメントを生成するために非常に重要な役割を果たします。適切な Go Doc Comment を書くことで、他の開発者があなたのコードを理解しやすくなり、また、ドキュメントを参照することで、コードの使い方を学ぶことができます。