首页 > 后端开发 > Golang > 激动人心的 Go-lang 项目来启动您的 DevOps 之旅

激动人心的 Go-lang 项目来启动您的 DevOps 之旅

Linda Hamilton
发布: 2024-12-12 14:21:11
原创
551 人浏览过

? 介绍

欢迎来到 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
登录后复制
登录后复制
登录后复制

xciting Go-lang Projects to Kickstart Your DevOps Journey

由于我有一个分区,如果我提供不同的路径,我会得到相同的结果。

这个项目演示了 Go 如何与系统的底层 API 交互,使其成为系统监控任务的一个很好的起点。 ?


? HTTP 服务器程序:托管组合网站

第二个项目涉及在 Go 中创建一个托管作品集网站的 HTTP 服务器。该项目演示了如何构建和提供静态网站,同时合并健康检查端点进行监控。

您可以在我的 GitHub 存储库中找到源代码。

构建 HTTP 服务器的步骤

  • 创建一个名为http_server.go的文件并添加以下代码:
go version
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

如何运作

  • 静态文件服务器:http.FileServer 函数提供 ./static 目录中的文件。
  • 健康检查端点:定义 /health 路由以提供简单的健康检查指标。
  • 服务器设置:服务器默认侦听端口 8090,并记录启动过程中的任何错误。

创建投资组合网站

  1. 结构:在静态文件夹内,创建:

    • index.html
    • 样式.css
    • 名为 images 的文件夹,其中包含名为 profile.jpeg 的个人资料图片。
  2. 将以下内容添加到您的文件中:

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)
}
登录后复制
登录后复制
登录后复制

xciting Go-lang Projects to Kickstart Your DevOps Journey

该项目展示了如何使用 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

  1. 列出所有工具 要获取工具列表,请使用:
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)
}
登录后复制
登录后复制
登录后复制

xciting Go-lang Projects to Kickstart Your DevOps Journey

输出:

go run disk_usage.go /path/to/directory
登录后复制
  1. 添加新工具 要添加新工具,请使用:
go run disk_usage.go
登录后复制

xciting Go-lang Projects to Kickstart Your DevOps Journey

输出:

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)
    }
}
登录后复制
  1. 获取工具详细信息 要获取特定工具的详细信息,请使用:
<!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
登录后复制

xciting Go-lang Projects to Kickstart Your DevOps Journey


?结论

在本博客中,我们探索了三个实用的 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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板