欢迎来到 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中文网其他相关文章!