? 介紹
歡迎來到 DevOps 的世界! ?今天,我?guī)е硪粋€令人興奮的博客回來了,幫助您更深入地了解 DevOps 任務(wù)的實際編程。在我之前的博客中,我們探索了 3 個為 DevOps 自動化奠定基礎(chǔ)的 Python 項目。
現(xiàn)在,讓我們換個方向,探索 Go-lang 的力量!本博客將指導(dǎo)您構(gòu)建 3 個既實用又適合初學(xué)者的 Go-lang 項目:
- 監(jiān)控磁盤使用情況用于跟蹤存儲統(tǒng)計信息的工具。
- 使用 HTTP 服務(wù)器托管簡歷網(wǎng)站。
- 用于管理 DevOps 工具的 RESTful API 程序。
所以,拿起你最喜歡的代碼編輯器,讓我們開始吧! ?
?先決條件
在我們深入構(gòu)建這些項目之前,讓我們確保您的環(huán)境已設(shè)置完畢并準備就緒。這是您需要的:
1。 Go(Go 語言)
您需要在系統(tǒng)上安裝 Go。根據(jù)您的操作系統(tǒng)執(zhí)行以下步驟:
Windows
- 從官網(wǎng)下載最新的Go安裝程序。
- 運行安裝程序并按照屏幕上的說明進行操作。
- 通過打開命令提示符或 PowerShell 并鍵入以下內(nèi)容來驗證安裝:
go version
Ubuntu
- 打開終端并運行:
sudo apt update sudo apt install -y golang
- 驗證安裝:
go version
macOS
- 使用Homebrew安裝Go。跑步:
brew install go
- 驗證安裝:
go version
2。對Go的基本了解
雖然您不需要成為專家,但對變量、函數(shù)和結(jié)構(gòu)等 Go 概念有基本的了解將有助于您順利地進行操作。如果您是 Go 新手,我建議您探索 Go Tour 以獲取快速介紹。
滿足這些先決條件后,您就可以開始構(gòu)建這些很棒的 Go-lang 項目了! ?
?監(jiān)控磁盤使用情況應(yīng)用程序
讓我們從第一個項目開始我們的旅程——磁盤使用情況監(jiān)控工具。該程序?qū)椭治鱿到y(tǒng)上任何指定目錄的磁盤使用情況。
您可以在我的 GitHub 存儲庫中找到源代碼。讓我們首先創(chuàng)建一個名為 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 函數(shù)來獲取磁盤統(tǒng)計信息,包括總空間、已用空間和可用空間。
- 它計算已用磁盤空間的百分比,并以用戶友好的方式格式化輸出。
- 實施錯誤處理以檢查提供的路徑是否存在或訪問它是否存在問題。
運行程序
要運行該程序,請使用以下命令:
- 查看特定目錄的磁盤使用情況:
go version
- 如果不指定路徑,程序默認為根目錄(/):
sudo apt update sudo apt install -y golang
由于我有一個分區(qū),如果我提供不同的路徑,我會得到相同的結(jié)果。
這個項目演示了 Go 如何與系統(tǒng)的底層 API 交互,使其成為系統(tǒng)監(jiān)控任務(wù)的一個很好的起點。 ?
? HTTP 服務(wù)器程序:托管組合網(wǎng)站
第二個項目涉及在 Go 中創(chuàng)建一個托管作品集網(wǎng)站的 HTTP 服務(wù)器。該項目演示了如何構(gòu)建和提供靜態(tài)網(wǎng)站,同時合并健康檢查端點進行監(jiān)控。
您可以在我的 GitHub 存儲庫中找到源代碼。
構(gòu)建 HTTP 服務(wù)器的步驟
- 創(chuàng)建一個名為http_server.go的文件并添加以下代碼:
go version
如何運作
- 靜態(tài)文件服務(wù)器:http.FileServer 函數(shù)提供 ./static 目錄中的文件。
- 健康檢查端點:定義 /health 路由以提供簡單的健康檢查指標。
- 服務(wù)器設(shè)置:服務(wù)器默認偵聽端口 8090,并記錄啟動過程中的任何錯誤。
創(chuàng)建投資組合網(wǎng)站
-
結(jié)構(gòu):在靜態(tài)文件夾內(nèi),創(chuàng)建:
- index.html
- 樣式.css
- 名為 images 的文件夾,其中包含名為 profile.jpeg 的個人資料圖片。
將以下內(nèi)容添加到您的文件中:
index.html:
brew install go
運行程序
- 使用以下命令啟動 HTTP 服務(wù)器:
go version
- 您的作品集網(wǎng)站現(xiàn)在將位于: 本地主機:8090
訪問健康檢查
要檢查服務(wù)器的健康狀況,請訪問:
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 創(chuàng)建一個用于托管靜態(tài)內(nèi)容的功能性 Web 服務(wù)器,并通過健康檢查端點進行額外監(jiān)控。 ?
? RESTful API 項目:管理 DevOps 工具
在本博客的最終項目中,我們將創(chuàng)建一個 RESTful API,允許您管理 DevOps 工具列表。該程序演示了如何使用 Go 的 net/http 包來處理 RESTful 路由和管理數(shù)據(jù)。
完整的源代碼可以在我的 GitHub 存儲庫中找到。
構(gòu)建 RESTful API
第 1 步:主程序
創(chuàng)建一個名為 main.go 的文件并添加以下代碼:
go version
第 2 步:數(shù)據(jù)處理
在tools目錄中,創(chuàng)建一個名為data.go的文件并添加:
sudo apt update sudo apt install -y golang
第 3 步:處理程序
在tools目錄中,創(chuàng)建另一個名為handler.go的文件并添加:
go version
初始化模塊
運行程序之前,初始化Go模塊:
brew install go
這確保項目可以使用項目/工具包。
運行程序
通過運行啟動服務(wù)器:
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
?結(jié)論
在本博客中,我們探索了三個實用的 Go 項目,可幫助您獲得軟件開發(fā)不同方面的實踐經(jīng)驗。從監(jiān)控磁盤使用情況到構(gòu)建簡單的 HTTP 服務(wù)器,再到托管產(chǎn)品組合網(wǎng)站,最后創(chuàng)建 RESTful API 來管理 DevOps 工具,這些項目為任何希望提高 Go 編程技能的人提供了堅實的基礎(chǔ)。
- 磁盤使用情況監(jiān)控應(yīng)用程序向您介紹了 Go 中的系統(tǒng)調(diào)用和基本文件處理,讓您深入了解如何與計算機的文件系統(tǒng)進行交互。
- HTTP 服務(wù)器項目 讓您能夠?qū)W習(xí)如何提供靜態(tài)文件并處理基本的健康檢查端點,幫助您開始使用 Go 進行 Web 開發(fā)。
- RESTful API 項目演示了如何構(gòu)建 API、通過并發(fā)控制管理數(shù)據(jù)以及如何通過 POST 和 GET 請求使應(yīng)用程序交互。
每個項目都是一個構(gòu)建塊,可以擴展以適應(yīng)實際應(yīng)用程序。無論您是對監(jiān)控系統(tǒng)、開發(fā) Web 應(yīng)用程序還是構(gòu)建 API 感興趣,Go 都能提供高效開發(fā)所需的簡單性和強大功能。
?如需了解更多信息博客,請在 Hashnode、X(Twitter) 和 LinkedIn 上關(guān)注我。
到此為止,祝您編碼愉快??!
快樂學(xué)習(xí)! ?
以上是激動人心的 Go-lang 項目來啟動您的 DevOps 之旅的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

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

禪工作室 13.0.1
功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

TOIntegrategolangServicesWithExistingPypythoninFrasture,userestapisorgrpcForinter-serviceCommunication,允許GoandGoandPyThonAppStoStoInteractSeamlessSeamLlyThroughlyThroughStandArdArdAdrotized Protoccols.1.usererestapis(ViaFrameWorkslikeSlikeSlikeGiningOandFlaskInpyThon)Orgrococo(wirs Propococo)

Golangofferssuperiorperformance,nativeconcurrencyviagoroutines,andefficientresourceusage,makingitidealforhigh-traffic,low-latencyAPIs;2.Python,whileslowerduetointerpretationandtheGIL,provideseasierdevelopment,arichecosystem,andisbettersuitedforI/O-bo

Golang主要用于后端開發(fā),但也能在前端領(lǐng)域間接發(fā)揮作用。其設(shè)計目標聚焦高性能、并發(fā)處理和系統(tǒng)級編程,適合構(gòu)建API服務(wù)器、微服務(wù)、分布式系統(tǒng)、數(shù)據(jù)庫操作及CLI工具等后端應(yīng)用。雖然Golang不是網(wǎng)頁前端的主流語言,但可通過GopherJS編譯成JavaScript、通過TinyGo運行于WebAssembly,或搭配模板引擎生成HTML頁面來參與前端開發(fā)。然而,現(xiàn)代前端開發(fā)仍需依賴JavaScript/TypeScript及其生態(tài)。因此,Golang更適合以高性能后端為核心的技術(shù)棧選擇。

安裝Go的關(guān)鍵在于選擇正確版本、配置環(huán)境變量并驗證安裝。1.前往官網(wǎng)下載對應(yīng)系統(tǒng)的安裝包,Windows使用.msi文件,macOS使用.pkg文件,Linux使用.tar.gz文件并解壓至/usr/local目錄;2.配置環(huán)境變量,在Linux/macOS中編輯~/.bashrc或~/.zshrc添加PATH和GOPATH,Windows則在系統(tǒng)屬性中設(shè)置PATH為Go的安裝路徑;3.使用goversion命令驗證安裝,并運行測試程序hello.go確認編譯執(zhí)行正常。整個流程中PATH設(shè)置和環(huán)

Golang在構(gòu)建Web服務(wù)時CPU和內(nèi)存消耗通常低于Python。1.Golang的goroutine模型調(diào)度高效,并發(fā)請求處理能力強,CPU使用率更低;2.Go編譯為原生代碼,運行時不依賴虛擬機,內(nèi)存占用更小;3.Python因GIL和解釋執(zhí)行機制,在并發(fā)場景下CPU和內(nèi)存開銷更大;4.雖然Python開發(fā)效率高、生態(tài)豐富,但資源消耗較高,適合并發(fā)要求不高的場景。

要構(gòu)建一個GraphQLAPI在Go語言中,推薦使用gqlgen庫以提高開發(fā)效率。1.首先選擇合適的庫,如gqlgen,它支持根據(jù)schema自動生成代碼;2.接著定義GraphQLschema,描述API的結(jié)構(gòu)和查詢?nèi)肟冢缍xPost類型和查詢方法;3.然后初始化項目并生成基礎(chǔ)代碼,實現(xiàn)resolver中的業(yè)務(wù)邏輯;4.最后將GraphQLhandler接入HTTPserver,通過內(nèi)置Playground測試API。注意事項包括字段命名規(guī)范、錯誤處理、性能優(yōu)化及安全設(shè)置等,確保項目可維護性

選微服務(wù)框架應(yīng)根據(jù)項目需求、團隊技術(shù)棧和性能預(yù)期來決定。1.性能要求高時優(yōu)先考慮Go的KitEx或GoMicro,尤其KitEx適合復(fù)雜服務(wù)治理和大規(guī)模系統(tǒng);2.快速開發(fā)和迭代場景下Python的FastAPI或Flask更靈活,適合小團隊和MVP項目;3.團隊技能棧直接影響選型成本,已有Go積累則延續(xù)使用更高效,Python團隊貿(mào)然轉(zhuǎn)Go可能影響效率;4.Go框架在服務(wù)治理生態(tài)上更成熟,適合未來需對接高級功能的中大型系統(tǒng);5.可按模塊采用混合架構(gòu),不必拘泥于單一語言或框架。

sync.WaitGroup用于等待一組goroutine完成任務(wù),其核心是通過Add、Done、Wait三個方法協(xié)同工作。1.Add(n)設(shè)置需等待的goroutine數(shù)量;2.Done()在每個goroutine結(jié)束時調(diào)用,計數(shù)減一;3.Wait()阻塞主協(xié)程直到所有任務(wù)完成。使用時需注意:Add應(yīng)在goroutine外調(diào)用、避免重復(fù)Wait、務(wù)必確保Done被調(diào)用,推薦配合defer使用。常見于并發(fā)抓取網(wǎng)頁、批量數(shù)據(jù)處理等場景,能有效控制并發(fā)流程。
