? 介紹
歡迎來到 DevOps 的世界! ?今天,我帶著另一個令人興奮的部落格回來了,幫助您更深入地了解 DevOps 任務的實際程式設計。在我之前的部落格中,我們探索了 3 個為 DevOps 自動化奠定基礎的 Python 專案。
現在,讓我們換個方向,探索 Go-lang 的力量!本部落格將引導您建立 3 個既實用又適合初學者的 Go-lang 專案:
- 監控磁碟使用情況用於追蹤儲存統計資料的工具。
- 使用 HTTP 伺服器託管履歷網站。
- 用於管理 DevOps 工具的 RESTful API 程式。
所以,拿起你最喜歡的程式碼編輯器,讓我們開始吧! ?
?先決條件
在我們深入建立這些項目之前,讓我們確保您的環境已設定完畢並準備就緒。這是您需要的:
1。 Go(Go 語)
您需要在系統上安裝 Go。根據您的作業系統執行以下步驟:
Windows
- 從官網下載最新的Go安裝程式。
- 執行安裝程式並按照螢幕上的指示進行操作。
- 透過開啟命令提示字元或 PowerShell 並鍵入以下內容來驗證安裝:
go version
Ubuntu
- 開啟終端機並運作:
sudo apt update sudo apt install -y golang
- 驗證安裝:
go version
macOS
- 使用Homebrew安裝Go。跑步:
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) }
計畫如何運作:
- 程式使用 syscall.Statfs 函數來取得磁碟統計信息,包括總空間、已使用空間和可用空間。
- 它計算已用磁碟空間的百分比,並以使用者友好的方式格式化輸出。
- 實作錯誤處理以檢查提供的路徑是否存在或存取它是否有問題。
運行程式
要運行該程序,請使用以下命令:
- 查看特定目錄的磁碟使用情況:
go version
- 如果不指定路徑,程式預設為根目錄(/):
sudo apt update sudo apt install -y golang
由於我有一個分割區,如果我提供不同的路徑,我會得到相同的結果。
這個專案示範了 Go 如何與系統的底層 API 交互,使其成為系統監控任務的一個很好的起點。 ?
? HTTP 伺服器程式:託管組合網站
第二個專案涉及在 Go 中建立託管作品集網站的 HTTP 伺服器。此專案示範如何建立和提供靜態網站,同時合併健康檢查端點進行監控。
您可以在我的 GitHub 儲存庫中找到原始程式碼。
建構 HTTP 伺服器的步驟
- 建立一個名為http_server.go的檔案並加入以下程式碼:
go version
如何運作
- 靜態檔案伺服器:http.FileServer 函數提供 ./static 目錄中的檔案。
- 健康檢查端點:定義 /health 路由以提供簡單的健康檢查指標。
- 伺服器設定:伺服器預設偵聽連接埠 8090,並記錄啟動過程中的任何錯誤。
建立投資組合網站
-
結構:在靜態資料夾內,建立:
- index.html
- 樣式.css
- 名為 images 的資料夾,其中包含名為 profile.jpeg 的個人資料圖片。
將以下內容加入您的文件中:
index.html:
brew install go
運行程式
- 使用下列指令啟動 HTTP 伺服器:
go version
- 您的作品集網站現在將位於: 本地主機:8090
訪問健康檢查
要檢查伺服器的健康狀況,請造訪:
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 工具
在本部落格的最終專案中,我們將建立一個 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) } }
- 獲取工具詳細信息 要獲取特定工具的詳細信息,請使用:
<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"> <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 程式設計技能的人提供了堅實的基礎。
- 磁碟使用情況監控應用程式向您介紹了 Go 中的系統呼叫和基本檔案處理,讓您深入了解如何與電腦的檔案系統互動。
- HTTP 伺服器專案 讓您學習如何提供靜態檔案並處理基本的健康檢查端點,幫助您開始使用 Go 進行 Web 開發。
- RESTful API 專案示範如何建立 API、透過並發控制管理資料以及如何透過 POST 和 GET 請求使應用程式互動。
每個專案都是一個構建塊,可以擴展以適應實際應用程式。無論您是對監控系統、開發 Web 應用程式或建置 API 感興趣,Go 都能提供高效開發所需的簡單性和強大功能。
?如需了解更多資訊博客,請在 Hashnode、X(Twitter) 和 LinkedIn 上關注我。
到此為止,祝您編碼愉快! !
快樂學習! ?
以上是令人興奮的 Go-lang 專案來啟動您的 DevOps 之旅的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在Debian系統上管理Kubernetes(K8S)節點通常涉及以下幾個關鍵步驟:1.安裝和配置Kubernetes組件準備工作:確保所有節點(包括主控節點和工作節點)都已安裝Debian操作系統,並且滿足安裝Kubernetes集群的基本要求,如足夠的CPU、內存和磁盤空間。禁用swap分區:為了確保kubelet能夠順利運行,建議禁用swap分區。設置防火牆規則:允許必要的端口,如kubelet、kube-apiserver、kube-scheduler等使用的端口。安裝container

在Debian上設置Golang環境時,確保系統安全是至關重要的。以下是一些關鍵的安全設置步驟和建議,幫助您構建一個安全的Golang開發環境:安全設置步驟系統更新:在安裝Golang之前,確保系統是最新的。使用以下命令更新系統軟件包列表和已安裝的軟件包:sudoaptupdatesudoaptupgrade-y防火牆配置:安裝並配置防火牆(如iptables)以限制對系統的訪問。僅允許必要的端口(如HTTP、HTTPS和SSH)連接。 sudoaptinstalliptablessud

在Debian上優化和部署Kubernetes集群的性能是一個涉及多個方面的複雜任務。以下是一些關鍵的優化策略和建議:硬件資源優化CPU:確保為Kubernetes節點和Pod分配足夠的CPU資源。內存:增加節點的內存容量,特別是對於內存密集型應用。存儲:使用高性能的SSD存儲,避免使用網絡文件系統(如NFS),因為它們可能會引入延遲。內核參數優化編輯/etc/sysctl.conf文件,添加或修改以下參數:net.core.somaxconn:65535net.ipv4.tcp_max_syn

在Debian系統中,你可以利用cron來安排定時任務,實現Python腳本的自動化執行。首先,啟動終端。通過輸入以下命令,編輯當前用戶的crontab文件:crontab-e如果需要以root權限編輯其他用戶的crontab文件,請使用:sudocrontab-uusername-e將username替換為你要編輯的用戶名。在crontab文件中,你可以添加定時任務,格式如下:*****/path/to/your/python-script.py這五個星號分別代表分鐘(0-59)、小

在Debian系統中調整Golang的網絡參數可以通過多種方式實現,以下是幾種可行的方法:方法一:通過設置環境變量臨時設置環境變量:在終端中輸入以下命令可以臨時設置環境變量,此設置僅在當前會話有效。 exportGODEBUG="gctrace=1netdns=go"其中,gctrace=1會激活垃圾回收跟踪,netdns=go則使Go使用其自身的DNS解析器而非系統默認的。永久設置環境變量:將上述命令添加到你的shell配置文件中,例如~/.bashrc或~/.profile

在Debian系統上自定義LibOffice的快捷鍵可以通過系統設置進行調整。以下是一些常用的步驟和方法來設置LibOffice的快捷鍵:設置LibOffice快捷鍵的基本步驟打開系統設置:在Debian系統中,點擊左上角的菜單(通常是一個齒輪圖標),然後選擇“系統設置”。選擇設備:在系統設置窗口中,選擇“設備”。選擇鍵盤:在設備設置頁面中,選擇“鍵盤”。找到對應工具的命令:在鍵盤設置頁面中,向下滾動到最底部可以看到“快捷鍵”選項,點擊它會彈出一個窗口。在彈出的窗口中找到對應LibOffice工

在Debian系統上部署Kubernetes(K8s)集群時,需要關注多個關鍵點,以確保集群的穩定性和安全性。以下是一些主要的注意事項:禁用Swap分區:從Kubernetes1.8版本開始,需要禁用Swap分區。可以使用以下命令臨時禁用Swap:sudoswapoff-a若要永久禁用Swap,需編輯/etc/fstab文件,並註釋掉包含“swap”的行。設置內核參數:啟用IPv4轉發:sudotee/etc/sysctl.d/k8s.conf設置網絡參數,如net.bridge.brid

Kubernetes(簡稱K8s)在Debian上部署具有以下優勢:穩定性:Debian是一個穩定且可靠的操作系統,適合作為Kubernetes的運行環境。許多教程推薦使用Debian12作為底層操作系統進行Kubernetes的部署,這表明Debian提供了可靠的運行環境,能夠滿足Kubernetes對操作系統的基本要求。安全性:Debian提供了強大的安全特性,如SELinux和AppArmor,可以進一步增強Kubernetes集群的安全性。通過合理的配置和優化措施,可以確保Kuberne


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具