【ITニュース解説】Golang Cheat Sheet
2025年09月21日に「Dev.to」が公開したITニュース「Golang Cheat Sheet」について初心者にもわかりやすく解説しています。
ITニュース概要
Go言語の入門者向けチートシート。変数、関数、制御文、構造体、配列、マップ、ポインタ、インターフェース、エラー処理の主要概念を、コード例で簡潔に解説する。Go言語の基本習得を効率化する。
ITニュース解説
Golang(ゴー言語)は、Googleが開発したプログラミング言語で、シンプルで効率的、そして並行処理に強いという特徴がある。システムエンジニアを目指す上で、このGo言語の基礎を理解することは非常に役立つ。ここでは、Go言語の主要な要素を一つずつ見ていこう。
Goプログラムは、通常、package mainで始まり、import文で必要なパッケージを取り込む。func main()はプログラムの起点となる関数で、ここから処理が開始される。例えば、「Hello, Go!」と表示するだけのシンプルなプログラムも、これら基本的な要素で構成される。fmt.Printlnは、テキストを画面に出力するための機能だ。
次に、データを扱うための「変数」と「定数」について解説する。変数はプログラムの実行中に値が変わる可能性のあるデータを格納する箱のようなものだ。Goではvar name string = "Mie"のようにvarキーワードと型を使って明示的に宣言する方法と、age := 35のように:=(ショートハンド)を使って型を推論させて宣言する方法がある。ショートハンドは関数内で使うことができる。一方、定数(const Pi = 3.14)は一度宣言するとその値が変わらない。円周率のような固定値に使うと便利だ。
プログラムの流れを制御する「制御構造」も重要だ。if-else文は条件に応じて処理を分岐させる。例えば、ある値が10より大きければ「Big」、そうでなければ「Small」と表示するといった具合だ。forループは処理を繰り返し実行するために使う。for i := 0; i < 5; i++は指定回数繰り返す一般的なループだ。また、for _, v := range []string{"a", "b", "c"}のようにrangeキーワードを使うと、配列やスライス、マップといったコレクションの各要素を順に処理できる。switch文は複数の条件分岐をシンプルに記述できる。曜日によって異なる処理を行う場合などに活用できる。
「関数」は特定の処理をひとまとまりにしたもので、プログラムの再利用性や可読性を高める。func add(a int, b int) int { return a + b }のように定義し、引数を受け取って結果を返す。Go言語の関数の特徴として、複数の戻り値を返すことができる点がある。例えば、func swap(x, y string) (string, string)のように2つの文字列を入れ替えて返す関数がその例だ。さらに、戻り値に名前を付ける「名前付き戻り値」もサポートされており、func split(sum int) (x, y int)のように記述することで、戻り値の変数を関数内で定義し、returnだけで値を返すことが可能になる。
関連するデータをまとめて扱うのが「構造体(struct)」だ。例えば、名前と年齢を持つPersonという構造体を定義することで、一人の人物に関する情報を一箇所で管理できる。構造体に関連付けられた関数を「メソッド」と呼ぶ。func (p Person) Greet()のように、メソッドはレシーバと呼ばれる引数を持つことで、特定の構造体のインスタンスに対して操作を行う。レシーバには値レシーバ(p Person)とポインタレシーバ(p *Person)があり、値レシーバは構造体のコピーに対して操作し、ポインタレシーバは元の構造体を直接変更できる。例えば、誕生日で年齢を増やす操作は、元のPersonの年齢を変える必要があるためポインタレシーバを使う。
複数のデータをまとめて扱うためのデータ構造には、「配列」、「スライス」、「マップ」がある。配列(arr := [3]int{1, 2, 3})は、同じ型の固定長の要素を格納する。一度サイズを決めると変更できない。スライス(slice := []int{1, 2, 3})は配列よりも柔軟で、可変長の要素を格納できる。append関数を使って新しい要素を追加することが可能だ。マップ(m := map[string]int{"a": 1, "b": 2})は、キーと値のペアでデータを管理する。辞書のようにキーを使って対応する値にアクセスでき、delete関数で要素を削除することもできる。
「ポインタ」は、変数がメモリ上のどこに格納されているかを示す「アドレス」を扱う仕組みだ。x := 10という変数xがあるとき、p := &xと書くと、pはxのアドレスを指すポインタとなる。ポインタが指すアドレスに格納されている値を取り出す操作を「デリファレンス」と呼び、fmt.Println(*p)のように*を使って行う。ポインタを経由して値を変更することも可能で、*p = 20とすれば、xの値も20に変わる。
「インターフェース」は、特定のメソッドを持つ型が満たすべき「契約」を定義するものだ。例えば、SpeakerというインターフェースがSpeak() stringというメソッドを持つと定義されていれば、Speak()メソッドを実装するどのような型でもSpeakerインターフェースとして扱える。Dog型がSpeak()メソッドを実装していれば、var s Speaker = Dog{}のようにDog型のインスタンスをSpeaker型の変数に代入できる。これにより、異なる型のオブジェクトを統一的な方法で操作する「ポリモーフィズム」を実現できる。
最後に、「エラー処理」について説明する。Go言語では、エラーは関数の戻り値の一つとして扱われるのが一般的だ。関数が正常に処理された場合はエラーを表す戻り値にnil(何もないこと)が返され、問題が発生した場合はerrors.Newなどで作成されたエラーオブジェクトが返される。func div(a, b int) (int, error)のように、通常の戻り値と一緒にerror型を返すことで、呼び出し元でエラーが発生したかどうかをチェックし、適切に処理を分岐できる。これにより、プログラムの堅牢性が高まる。
これらがGo言語の主要な概念の基礎となる。これらの要素を理解し、実際にコードを書いてみることで、システムエンジニアとしての第一歩を踏み出せるだろう。