Chuyển đến nội dung chính

レッスン 1: Go の紹介 - クラウドネイティブ言語

なぜ行くのですか? Rust、Java、Python と比較してください。歴史、設計哲学、Go エコシステム。 GOPATH、Go モジュールをインストールします。 Hello World と go ツールチェーン。

💻 プログラミング — レッスン 1 レッスン 1: Go の紹介 - クラウドの言語 ネイティブ

Golang: 基本から高度まで

パート 1: Go の基礎

xdev.asia

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を使用した製品
GoogleKubernetes、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~15MBJRE + 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 の構文上の基礎。