1.囲碁とは何ですか?
Go (または Golang) は、によって作成されたオープンソース プログラミング言語です。 ロバート・グリーズマー、 ロブ・パイク そして ケン・トンプソン 2007 年に Google で開発され、2009 年に正式にリリースされました。Go は、大規模なソフトウェア開発における実際の問題を解決するために設計されました。 すぐにコンパイルする、 単純な同時実行、 導入は簡単です。
Go は言語です 静的に型付けされた、 コンパイルされた、実行時の依存関係のない一意のバイナリを作成します。これが、Go が最適な選択肢である理由です。 クラウドネイティブ — Docker、Kubernetes、Terraform、Prometheus、etcd はすべて Go で書かれています。
優れた機能
- シンプルで読みやすい: キーワードはわずか 25、最小限の構文、読みやすいコード
- 高速コンパイル: 大規模プロジェクト全体を数秒でコンパイル
- 組み込みの同時実行性: ゴルーチンとチャネルは第一級市民です
- 静的バイナリ: 単一バイナリ、あらゆる OS/アーキテクチャ向けの簡単なクロスコンパイル
- 収集されたガベージ: 効率的な GC、低レイテンシー (Go 1.19 以降ではミリ秒未満)
- 豊富な標準ライブラリ: HTTP サーバー、JSON、暗号化、テスト...組み込み
2. なぜ Go を選ぶのですか?
業界に参入する
Go は大企業で広く使用されています。
| 会社名 | Goを使用した製品 |
|---|---|
| Kubernetes、gVisor、多くの内部サービス | |
| ドッカー | Docker エンジン、Docker Compose |
| ハシコーポレーション | Terraform、Consul、Vault、Nomad |
| ウーバー | マイクロサービス プラットフォーム、Jaeger トレース |
| クラウドフレア | エッジコンピューティング、DNS、セキュリティツール |
| けいれん | チャット サービス (1 秒あたり数百万のメッセージを処理) |
| Netflix | インフラストラクチャツール |
| ドロップボックス | パフォーマンス向上のための Python から Go への移行 |
最適な使用例
- マイクロサービスとAPI: REST、gRPC、GraphQL バックエンド
- クラウドインフラストラクチャ: CLI ツール、オペレーター、コントローラー
- DevOpsツール:CI/CD、モニタリング、自動化
- ネットワーキング: プロキシ、ロードバランサー、VPN
- データパイプライン:ETL、ストリーム処理
- ブロックチェーン: イーサリアム Go クライアント (Geth)
3. Go を他の言語と比較する
| 基準 | 行く | さび | ジャワ | パイソン | Node.js |
|---|---|---|---|---|---|
| タイピング | 静的 | 静的 | 静的 | ダイナミック | ダイナミック |
| 編集 | ネイティブバイナリ | ネイティブバイナリ | JVMバイトコード | 通訳済み | ジット (V8) |
| GC | はい (低遅延) | いいえ(所有権) | はい (JVM GC) | はい | はい (V8 GC) |
| 同時実行性 | ゴルーチン | 非同期/待機 + スレッド | 仮想スレッド | 非同期 | イベントループ |
| 学習曲線 | 低い | 高 | 平均 | 低い | 低い |
| パフォーマンス | 高 | 非常に高い | 高 | 低い | 平均 |
| メモリ使用量 | 低い | 非常に低い | 高 | 高 | 平均 |
| 展開サイズ | ~10~20MB | ~5~15MB | JRE + JAR | ランタイム + デプス | ランタイム + ノードモジュール |
| 生態系 | 良い | 開発中 | とても大きい | とても大きい | とても大きい |
Rust ではなく Go を選択するのはどのような場合ですか? 素早く書く必要がある場合、チームのオンボーディングを迅速に行う必要がある場合、GC を許容できる場合に行ってください。ゼロコストの抽象化、絶対的なメモリ安全性、組み込み/システムが必要な場合は Rust を使用してください。
Java ではなく Go を選択するのはどのような場合ですか? コンテナーフレンドリー (コンパクト、高速起動) が必要な場合に使用し、JVM エコシステムは必要ありません。必要な場合は Java Spring エコシステム、エンタープライズ標準、レガシー統合。
4. Go の設計哲学
Go は非常に特殊な設計原則に従っています。
4.1.賢さよりも単純さ
// Go: explicit, simple
if err != nil {
return fmt.Errorf("failed to read file: %w", err)
}
// Không có: exceptions, try-catch, generics phức tạp
// Không có: inheritance, ternary operator
// Không có: optional chaining, null coalescing
4.2.継承よりも構成
// Go sử dụng embedding thay vì inheritance
type Animal struct {
Name string
}
func (a Animal) Speak() string {
return a.Name + " speaks"
}
type Dog struct {
Animal // embedding, không phải inheritance
Breed string
}
// Dog "kế thừa" method Speak() từ Animal
dog := Dog{Animal: Animal{Name: "Rex"}, Breed: "Labrador"}
fmt.Println(dog.Speak()) // "Rex speaks"
4.3.同時実行は並列処理ではありません
ロブ・パイク: 「並行性とは、一度に多くのことを処理することです。並列性とは、一度に多くのことを行うことです。」
// Goroutines: lightweight concurrent execution
go func() {
// Chạy concurrent, chi phí ~2KB stack
}()
// Channels: communication between goroutines
ch := make(chan string)
go func() { ch <- "hello" }()
msg := <-ch
4.4.フォーマットする一つの方法
ゴーフムト 独自の標準に従ってコードを自動的にフォーマットします。コードスタイルについて議論する必要はもうありません。
5.Goをインストールする
5.1. macOS
# Cách 1: Homebrew (khuyến nghị)
brew install go
# Cách 2: Download từ go.dev
# Tải file .pkg từ https://go.dev/dl/ và cài đặt
# Verify
go version
# go version go1.23.x darwin/arm64
5.2. Linux (Ubuntu/Debian)
# Download và extract
wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz
# Thêm vào PATH (thêm vào ~/.bashrc hoặc ~/.zshrc)
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
# Verify
go version
5.3.窓
# Cách 1: Winget
winget install GoLang.Go
# Cách 2: Download .msi từ https://go.dev/dl/
# Verify (mở terminal mới)
go version
5.4. GOPATH と Go ワークスペース
# Xem cấu hình Go
go env
# Các biến quan trọng:
# GOROOT = /usr/local/go (Go installation)
# GOPATH = $HOME/go (Go workspace)
# GOBIN = $GOPATH/bin (Compiled binaries)
# GOMODCACHE = $GOPATH/pkg/mod (Module cache)
# Go workspace structure:
# ~/go/
# ├── bin/ ← Installed binaries (golangci-lint, air, etc.)
# ├── pkg/mod/ ← Downloaded module cache
# └── src/ ← (Legacy, không dùng với modules)
6. Hello World - 最初の Go プログラム
6.1.プロジェクトの初期化
# Tạo thư mục project
mkdir hello-go && cd hello-go
# Khởi tạo Go module
go mod init github.com/yourname/hello-go
# Tạo file go.mod - quản lý dependencies
6.2.コードを書く
// main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Go! 🚀")
// Variables
name := "Gopher" // short declaration
age := 15 // Go ra đời 2009
fmt.Printf("Xin chào %s, Go đã %d tuổi!\n", name, age)
}
6.3.実行して構築する
# Chạy trực tiếp (compile + run)
go run main.go
# Output: Hello, Go! 🚀
# Output: Xin chào Gopher, Go đã 15 tuổi!
# Build binary
go build -o hello-go main.go
./hello-go
# Cross-compile cho Linux (từ macOS)
GOOS=linux GOARCH=amd64 go build -o hello-go-linux main.go
# Cross-compile cho Windows
GOOS=windows GOARCH=amd64 go build -o hello-go.exe main.go
7.Goツールチェーン
Go には強力なツール セットが付属しており、追加のインストールは必要ありません。
| コマンド | 目的 |
|---|---|
走りに行きます | 直接コンパイルして実行する |
作りに行く | バイナリにコンパイルする |
テストに行く | テストの実行 |
行ってください | 標準に従ってコードをフォーマットする |
獣医に行く | 潜在的なエラーを検出する |
mod initに行く | 新しいモジュールを初期化する |
モッド整頓に行く | 依存関係をクリーンアップする |
取りに行く | 依存関係をダウンロードする |
インストールに行く | バイナリをコンパイルして $GOBIN にインストールします |
読みに行く | ドキュメントを参照してください |
生成しに行く | コード生成を実行する |
仕事に行く | ワークスペースモード(マルチモジュール) |
# Xem docs của một package
go doc fmt
go doc fmt.Printf
# Format toàn bộ project
go fmt ./...
# Kiểm tra lỗi tiềm ẩn
go vet ./...
# Download và clean dependencies
go mod tidy
8. エディターのセットアップ
8.1. VS コード (推奨)
// Cài extension: "Go" by Go Team at Google
// settings.json
{
"go.formatTool": "goimports",
"go.lintTool": "golangci-lint",
"go.useLanguageServer": true,
"editor.formatOnSave": true,
"[go]": {
"editor.defaultFormatter": "golang.go",
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
}
8.2. GoLand (JetBrains)
GoLand は Go に特化した IDE であり、デバッグ、リファクタリング、テストを最適にサポートします。大規模なプロジェクトに適しています。
8.3.必須ツール
# golangci-lint - meta-linter (chạy 50+ linters)
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# air - live reload khi phát triển
go install github.com/air-verse/air@latest
# gotests - generate test stubs
go install github.com/cweill/gotests/gotests@latest
# mockery - generate mocks
go install github.com/vektra/mockery/v2@latest
# swag - Swagger docs generation
go install github.com/swaggo/swag/cmd/swag@latest
9. 基本的な Go モジュール
Go Modules (Go 1.11 以降) は公式の依存関係管理システムです。
# go.mod - khai báo module và dependencies
module github.com/yourname/hello-go
go 1.23
require (
github.com/gin-gonic/gin v1.10.0
github.com/joho/godotenv v1.5.1
)
# Thêm dependency
go get github.com/gin-gonic/gin@latest
# Update dependency
go get -u github.com/gin-gonic/gin
# Remove unused dependencies
go mod tidy
# Vendor dependencies (copy vào project)
go mod vendor
10. 標準的なプロジェクト構造
テオ golang-standards/プロジェクトレイアウト:
my-go-project/
├── cmd/ # Entry points (main packages)
│ ├── api/
│ │ └── main.go # API server
│ └── worker/
│ └── main.go # Background worker
├── internal/ # Private packages (không thể import từ ngoài)
│ ├── handler/ # HTTP handlers
│ ├── service/ # Business logic
│ ├── repository/ # Data access
│ └── model/ # Domain models
├── pkg/ # Public packages (có thể import)
│ └── validator/
├── config/ # Configuration files
├── migrations/ # Database migrations
├── api/ # API specs (OpenAPI, protobuf)
├── scripts/ # Build, deploy scripts
├── go.mod
├── go.sum
├── Makefile
├── Dockerfile
└── README.md
11. まとめ
Go は、クラウドネイティブ時代向けに設計された、シンプルかつ強力な言語です。高速なコンパイル、組み込みの同時実行、静的バイナリ、豊富な標準ライブラリを備えた Go は、バックエンド サービス、マイクロサービス、インフラストラクチャ ツールに最適です。
次の記事ではさらに深く掘り下げていきます 変数、型、制御フロー — Go の構文上の基礎。