【プログラミング】【Go】Go言語(Golang) - j-komatsu/myCheatSheet GitHub Wiki

Go言語(Golang)

1. Go言語の概要

Go(Golang)は、2009年にGoogleによって開発されたオープンソースのプログラミング言語です。
シンプルな構文と高い並行処理能力を持ち、特にサーバーサイドやシステムプログラミングで広く利用されています。

1.1 Go言語の強み

  • シンプルで直感的な構文: C言語に近いが、より分かりやすい設計
  • 高い並行処理性能: Goroutineによる軽量なスレッド管理
  • コンパイル速度が高速: 静的型付けでありながら、迅速なビルドが可能
  • クロスコンパイルが容易: 異なるプラットフォーム向けのバイナリ生成が簡単
  • 標準ライブラリが充実: ネットワーク、ファイル操作、エンコーディングなどが標準でサポート

1.2 Goの歴史とバージョン履歴

バージョン リリース年 主な特徴
Go 1.0 2012年 最初の安定版リリース
Go 1.5 2015年 コンパイラの自己ホスト化(Goで書かれる)
Go 1.11 2018年 モジュール管理(Go Modules)の導入
Go 1.14 2020年 Goroutineスケジューラの改良
Go 1.18 2022年 ジェネリクス(Generics)機能の導入
Go 1.20 2023年 パフォーマンス最適化とエラー処理の改善

2. Goの特徴

特徴 説明
静的型付け コンパイル時に型がチェックされる
ガベージコレクション メモリ管理を自動化
並行処理 (Goroutine) 軽量スレッドを利用した並行処理が可能
クロスコンパイル 異なるプラットフォーム向けにコンパイルが容易
高速なコンパイル C言語並の速度でコンパイル可能

3. 実装方式

Go言語はコンパイル型言語であり、実行前にgo buildでバイナリを生成します。

3.1 簡単なGoプログラム

以下のコードは、Go言語で"Hello, Go!"と出力するシンプルなプログラムです。

package main
import "fmt"

func main() {
    fmt.Println("Hello, Go!")
}

実行方法:

go run main.go

出力:

Hello, Go!

4. Javaとの比較

比較項目 Go Java
型付け 静的型付け 静的型付け
メモリ管理 ガベージコレクション ガベージコレクション
並行処理 Goroutine スレッド
コンパイル バイナリ生成 JVMバイトコード
実行速度 高速 比較的遅い
エラーハンドリング error 型を返す try-catch 構文

5. よく使う構文と関数

5.1 変数宣言

var name string = "Go"
age := 10  // 短縮記法

このコードでは、nameを文字列として宣言し、ageを短縮記法(型推論)で整数として宣言しています。

5.2 条件分岐

if age > 5 {
    fmt.Println("Greater than 5")
} else {
    fmt.Println("Less than or equal to 5")
}

ageが5より大きい場合は"Greater than 5"が出力され、それ以外の場合は"Less than or equal to 5"が出力されます。

5.3 ループ処理

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

このコードは、0から4までの数字を順番に出力するループ処理を行います。

5.4 関数定義

func add(a int, b int) int {
    return a + b
}

fmt.Println(add(2, 3)) // 5

add関数は2つの整数を受け取り、その和を返します。呼び出し結果として5が出力されます。

6. Goの並行処理 (Goroutine)

package main
import (
    "fmt"
    "time"
)

func sayHello() {
    fmt.Println("Hello, Goroutine!")
}

func main() {
    go sayHello() // Goroutineの開始
    time.Sleep(time.Second) // メインスレッドが終了しないように待機
}

このコードでは、sayHello関数をGoroutineとして非同期実行します。
メインスレッドが即座に終了しないようにtime.Sleepで1秒待機しています。

出力:

Hello, Goroutine!

7. Goの処理フロー

flowchart TD
    A[スタート] -->|Goのコード作成| B(コンパイル)
    B -->|バイナリ生成| C[実行]
    C -->|結果出力| D[終了]

8. まとめ

Go言語はシンプルで並行処理が得意な言語であり、特にWeb開発やシステム開発に適しています。
Javaとの比較では、軽量かつ高速な実行が特徴であり、静的型付けやガベージコレクションなどの共通点もあります。