【プログラミング】【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との比較では、軽量かつ高速な実行が特徴であり、静的型付けやガベージコレクションなどの共通点もあります。