DevOps の世界へようこそ! ?今日は、DevOps タスクの実践的なプログラミングをさらに深く掘り下げるのに役立つ、別の刺激的なブログに戻ってきました。前回のブログでは、DevOps 自動化の基礎を築く 3 つの Python プロジェクトについて説明しました。
さあ、ギアを変えて、Go-lang のパワーを探ってみましょう!このブログでは、実用的で初心者にも優しい 3 つの Go-lang プロジェクトの構築について説明します。
それでは、お気に入りのコード エディターを入手して、始めましょう! ?
これらのプロジェクトの構築に入る前に、環境がセットアップされ、準備ができていることを確認してください。必要なものは次のとおりです:
1. Go (Golang)
Go をシステムにインストールする必要があります。オペレーティング システムに基づいて次の手順に従ってください:
Windows
go version
Ubuntu
sudo apt update sudo apt install -y golang
go version
macOS
brew install go
go version
2. Go の基本的な理解
専門家である必要はありませんが、変数、関数、構造体などの Go の概念を基本的に理解していると、スムーズに進めることができます。 Go を初めて使用する場合は、Go ツアーを参照して簡単に紹介することをお勧めします。
これらの前提条件が満たされていれば、これらの素晴らしい Go-lang プロジェクトの構築を開始する準備が整いました。 ?
最初のプロジェクトであるディスク使用量監視ツールから旅を始めましょう。このプログラムは、システム上の指定されたディレクトリのディスク使用量を分析するのに役立ちます。
ソース コードは私の GitHub リポジトリにあります。まず、disk_usage.go という名前のファイルを作成し、次のコードを追加します。
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
プログラムの仕組み:
プログラムの実行
プログラムを実行するには、次のコマンドを使用します:
go version
sudo apt update sudo apt install -y golang
パーティションが 1 つあるため、異なるパスを指定しても同じ結果が得られます。
このプロジェクトは、Go がシステムの基盤となる API とどのように対話できるかを示し、システム監視タスクの優れた出発点となります。 ?
2 番目のプロジェクトには、ポートフォリオ Web サイトをホストする HTTP サーバーを Go で作成することが含まれます。このプロジェクトでは、監視用のヘルス チェック エンドポイントを組み込みながら、静的 Web サイトを構築して提供する方法を示します。
ソース コードは私の GitHub リポジトリにあります。
HTTP サーバーを構築する手順
go version
仕組み
ポートフォリオ Web サイトの作成
構造: 静的フォルダー内に以下を作成します:
次のコンテンツをファイルに追加します:
index.html:
brew install go
プログラムの実行
go version
ヘルスチェックへのアクセス
サーバーの状態を確認するには、
にアクセスしてください。
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
このプロジェクトでは、Go-lang を使用して静的コンテンツをホストする機能的な Web サーバーを作成し、ヘルス チェック エンドポイントによる追加の監視を行う方法を紹介します。 ?
このブログの最後のプロジェクトでは、DevOps ツールのリストを管理できる RESTful API を作成します。このプログラムは、Go の net/http パッケージを使用して RESTful ルートを処理し、データを管理する方法を示します。
完全なソース コードは私の GitHub リポジトリで入手できます。
RESTful API の構築
ステップ 1: メインプログラム
main.go という名前のファイルを作成し、次のコードを追加します:
go version
ステップ 2: データの処理
tools ディレクトリに、data.go という名前のファイルを作成し、以下を追加します:
sudo apt update sudo apt install -y golang
ステップ 3: ハンドラー
tools ディレクトリに、handler.go という名前の別のファイルを作成し、以下を追加します:
go version
モジュールの初期化
プログラムを実行する前に、Go モジュールを初期化します。
brew install go
これにより、プロジェクトで project/tools パッケージを使用できるようになります。
プログラムの実行
次のコマンドを実行してサーバーを起動します:
go version
API のテスト
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
出力:
go run disk_usage.go /path/to/directory
go run disk_usage.go
出力:
package main import ( "fmt" "net/http" ) func healthCheckHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("OK")) } func main() { fs := http.FileServer(http.Dir("./static")) http.Handle("/", fs) http.HandleFunc("/health", healthCheckHandler) port := "8090" fmt.Printf("Starting server on port %s....", port) err := http.ListenAndServe(":"+port, nil) if err != nil { fmt.Println("Error starting server:", err) } }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pravesh Sudha - Portfolio</title> <link rel="stylesheet" href="style.css"> </head> <body> <header> <div> <p><strong>style.css:</strong><br> </p> <pre class="brush:php;toolbar:false">body { font-family: Arial, sans-serif; margin: 0; padding: 0; line-height: 1.6; color: #333; background-color: #f9f9f9; } header { background: #4caf50; color: #fff; padding: 20px 0; text-align: center; } header .profile-picture { width: 150px; height: 150px; border-radius: 50%; margin-bottom: 15px; } header h1 { font-size: 2.5em; margin: 0; } header .subtitle { font-size: 1.2em; margin: 0; } main { padding: 20px; max-width: 800px; margin: 20px auto; background: #fff; border-radius: 8px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } main .about, main .links { margin-bottom: 20px; } main .links ul { list-style: none; padding: 0; } main .links li { margin: 10px 0; } main .links a { color: #4caf50; text-decoration: none; font-weight: bold; } main .links a:hover { text-decoration: underline; } footer { text-align: center; padding: 10px 0; background: #333; color: #fff; }
出力:
go run http_server.go
このブログでは、ソフトウェア開発のさまざまな側面を実際に体験するのに役立つ 3 つの実践的な Go プロジェクトを検討してきました。ディスク使用量の監視から、シンプルな HTTP サーバーの構築、ポートフォリオ Web サイトのホスティング、そして最後に DevOps ツールを管理するための RESTful API の作成に至るまで、これらのプロジェクトは、Go プログラミング スキルを磨きたい人にとって強固な基盤を提供します。
これらの各プロジェクトは、実際のアプリケーションに合わせて拡張できる構成要素です。システムの監視、Web アプリケーションの開発、API の構築に興味がある場合でも、Go は効率的な開発に必要なシンプルさとパワーを提供します。
?さらに有益なブログについては、Hashnode、X(Twitter)、LinkedIn でフォローしてください。
それまで、ハッピーコーディング!!
楽しく学習してください! ?
以上がDevOps の旅を始めるための Go-lang プロジェクトの引用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。