? 介绍
欢迎来到 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系统中调整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

在Debian系统上部署Kubernetes集群可以通过多种方法实现,以下是利用kubeadm工具在Debian12上设置Kubernetes集群的详细步骤:预备工作确保你的Debian系统已经更新到最新版本。确保你拥有具有管理员权限的sudo用户。确保所有节点之间可以通过稳定网络互相连接。安装步骤设置主机名和更新hosts文件:在每个节点上,使用hostnamectl命令设置主机名,并在/etc/hosts文件中添加节点IP与主机名的对应关系。禁用所有节点的swap分区:为了让kubelet正

在Debian系统上搭建Golang环境,可以按照以下步骤进行:1.更新系统包列表首先,确保你的系统包列表是最新的:sudoaptupdate2.安装GolangDebian的官方仓库中提供了Golang的安装包。你可以使用以下命令来安装:sudoaptinstallgolang-go3.验证安装安装完成后,可以通过以下命令来验证Golang是否安装成功:goversion如果安装成功,你会看到类似如下的输出:goversiongo1.20.3linux/amd644.设置环境变

在Debian系统上进行JavaScript开发时,可以采用以下最佳实践来优化开发过程:选择合适的日志库对于Node.js应用,选择一个功能强大的日志库至关重要。常用的日志库如Winston、Pino和Bunyan等,提供了丰富的功能,包括日志级别设置、格式化和存储。使用正确的日志级别正确使用日志级别(如fatal、error、warn、info、debug)可以帮助区分关键事件和常规信息事件,有助于后续的故障排除和性能优化。日志分析工具GoAccess:对于网络日志分析,GoAccess是一个

在Debian上更新Kubernetes版本的步骤如下:备份现有集群:在进行任何升级之前,请确保备份您的Kubernetes集群数据。这可以通过使用etcd的备份工具来完成。检查当前版本:首先,您需要了解当前运行的Kubernetes版本。可以使用以下命令进行检查:kubectlversion查看可用的更新:访问Kubernetes官方发布页面(https://github.com/kubernetes/kubernetes/releases),查看最新的稳定版本,并确认是否支持您的Debian


热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集成开发工具