歡迎來到 DevOps 的世界! ?今天,我帶著另一個令人興奮的部落格回來了,幫助您更深入地了解 DevOps 任務的實際程式設計。在我之前的部落格中,我們探索了 3 個為 DevOps 自動化奠定基礎的 Python 專案。
現在,讓我們換個方向,探索 Go-lang 的力量!本部落格將引導您建立 3 個既實用又適合初學者的 Go-lang 專案:
所以,拿起你最喜歡的程式碼編輯器,讓我們開始吧! ?
在我們深入建立這些項目之前,讓我們確保您的環境已設定完畢並準備就緒。這是您需要的:
1。 Go(Go 語)
您需要在系統上安裝 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 Tour 以獲取快速介紹。
滿足這些先決條件後,您就可以開始建立這些很棒的 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
由於我有一個分割區,如果我提供不同的路徑,我會得到相同的結果。
這個專案示範了 Go 如何與系統的底層 API 交互,使其成為系統監控任務的一個很好的起點。 ?
第二個專案涉及在 Go 中建立託管作品集網站的 HTTP 伺服器。此專案示範如何建立和提供靜態網站,同時合併健康檢查端點進行監控。
您可以在我的 GitHub 儲存庫中找到原始程式碼。
建構 HTTP 伺服器的步驟
go version
如何運作
建立投資組合網站
結構:在靜態資料夾內,建立:
將以下內容加入您的文件中:
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 伺服器,並透過健康檢查端點進行額外監控。 ?
在本部落格的最終專案中,我們將建立一個 RESTful API,讓您管理 DevOps 工具清單。該程式示範如何使用 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
這確保項目可以使用項目/工具包。
運行程式
透過運行啟動伺服器:
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
在本部落格中,我們探索了三個實用的 Go 項目,可協助您獲得軟體開發不同方面的實務經驗。從監控磁碟使用情況到建立簡單的 HTTP 伺服器,再到託管產品組合網站,最後創建 RESTful API 來管理 DevOps 工具,這些專案為任何希望提高 Go 程式設計技能的人提供了堅實的基礎。
每個專案都是一個構建塊,可以擴展以適應實際應用程式。無論您是對監控系統、開發 Web 應用程式或建置 API 感興趣,Go 都能提供高效開發所需的簡單性和強大功能。
?如需了解更多資訊博客,請在 Hashnode、X(Twitter) 和 LinkedIn 上關注我。
到此為止,祝您編碼愉快! !
快樂學習! ?
以上是令人興奮的 Go-lang 專案來啟動您的 DevOps 之旅的詳細內容。更多資訊請關注PHP中文網其他相關文章!