ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
Go(通称 Golang)は、Google の Robert Griesemer・Rob Pike・Ken Thompson らが 2007 年に設計を開始し、2009 年 11 月にオープンソースとして公開された静的型付けコンパイル言語です。「C 言語ほど煩雑でなく、Python ほど遅くなく、Java ほど冗長でない」という現実的なバランスを狙って設計されました。ソースコードの拡張子は .go、コンパイル後はターゲット OS / アーキテクチャに応じた 単一の実行バイナリ が生成されます。
Go の最大の特徴は 並行処理(concurrency)モデル の優秀さです。go キーワードを関数呼び出しの前に置くだけで「goroutine」と呼ばれる軽量スレッドが起動し、channel によってスレッド間で安全に値を受け渡せます。これは Tony Hoare の CSP(Communicating Sequential Processes)理論を実装に落とし込んだものです。さらに ガベージコレクション(GC)を搭載しているため、C / C++ のような手動メモリ管理は不要です。
1.18(2022 年)でジェネリクスが導入され、func Map[T, U any](s []T, f func(T) U) []U のような型パラメータが書けるようになりました。1.21 で min / max / clear の組み込み、1.22 でループ変数のスコープ修正など、後方互換性を慎重に保ちつつ進化を続けています。
用途は CLI ツール・Web API サーバー・マイクロサービス・クラウドネイティブインフラ が中心。Docker・Kubernetes・Terraform・Prometheus・etcd・CockroachDB など、現代のインフラを支えるツールの多くが Go で書かれています。コンパイル速度が極めて速く、CI / CD と相性が良い点も普及の理由です。
ファイル種類とビルド成果物
| 拡張子 / ファイル | 役割 | ビルド経路 |
|---|---|---|
.go | Go ソースコード | 入力 |
go.mod | モジュール定義(モジュール名・Go バージョン・依存) | プロジェクトルート |
go.sum | 依存のチェックサム(ハッシュ検証) | 自動生成 |
実行バイナリ(拡張子なし / .exe) | OS ネイティブ単一バイナリ | go build の出力 |
_test.go | テストコード(同パッケージ内) | go test が拾う |
Go は 中間ファイル(.class / .pyc 等)をユーザーに意識させない 設計です。$GOCACHE に隠れてはいますが、開発者が直接触ることはまずありません。配布物は単一バイナリで完結し、ランタイムや libc を別途配る必要がない(CGO を使わない限り)のが大きな利点です。
「Hello, World」
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
ビルドと実行:
$ go mod init example.com/hello
$ go build -o hello
$ ./hello
Hello, World
# クロスコンパイル(Linux 上で Windows 用バイナリを作る)
$ GOOS=windows GOARCH=amd64 go build -o hello.exe
パッケージ管理・ビルドツール
Go の依存管理は Go Modules(1.11 から導入、1.16 で正式デフォルト)が標準です。go.mod にモジュールパス・Go バージョン・依存を書き、go.sum でハッシュを固定します。
go mod init example.com/myapp # 初期化
go get github.com/gin-gonic/gin # 依存追加
go build ./... # 全パッケージビルド
go test ./... # 全テスト実行
go vet ./... # 静的解析
gofmt -w . # コード整形
go run main.go # コンパイル + 実行(中間バイナリは破棄)
関連言語との比較
| 項目 | Go | Rust | Java | Python |
|---|---|---|---|---|
| 型システム | 静的・GC あり | 静的・GC なし(所有権) | 静的・GC あり | 動的 |
| 配布 | 単一バイナリ | 単一バイナリ | JAR + JVM 必要 | ソース + ランタイム |
| 並行処理 | goroutine + channel | async / await + Send/Sync | Thread / Virtual Thread | asyncio / GIL 制約 |
| 学習コスト | 低(言語仕様が小さい) | 高(所有権が壁) | 中 | 低 |
| コンパイル速度 | 非常に速い | 遅い | 速い | —(インタプリタ) |
注意点・落とし穴
- エラー処理が冗長:
if err != nil { return err }が頻出。例外がないので、エラーは値として明示的に伝播させる必要がある。 - ループ変数のスコープ:1.22 未満では
for _, v := range items { go func() { use(v) }() }のvが共有され、典型的バグになる。1.22 以降はループ毎に新しい変数が作られるので解消。 - nil interface ハマり:型情報を持つ nil(typed nil)と純粋な nil は
==比較で挙動が違う。 - 循環インポート禁止:パッケージ A → B → A は許可されない。設計段階でレイヤを切る必要がある。
- ジェネリクスは後付け:標準ライブラリの多くが
interface{}ベースで設計されているため、新旧 API が混在しがち。
関連リンク
- プログラミング・スクリプト(親カテゴリ)
- ファイル拡張子とは(概論)
- プログラミング言語(カテゴリ)
- Python(.py)
- Rust(.rs)
- Java(.java / .class / .jar)
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?