前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Gopher 学习 linux,这才是最正确的姿势!

Gopher 学习 linux,这才是最正确的姿势!

作者头像
小锟哥哥
发布2022-05-10 08:56:09
5220
发布2022-05-10 08:56:09
举报
文章被收录于专栏:GoLang全栈

可能提到运维使用的开发语言,大家第一个想到的应该就是 Python。

因为它的库多,用起来之滑溜。

其实 Go 用于运维方面的库也不少,今天就给大家介绍一个库,分分钟把服务器的资源信息,比如 CPU呀,内存呀的使用情况,扒得一清二楚。

我们用到的库

官方的 Github 地址:

代码语言:javascript
复制
https://github.com/shirou/gopsutil

看了下,在我写这篇文章的时候已经有 6.9k 的 start 了。

这是他当前版本支持采集的信息。

上代码

我们新建一个工程,在工程里面初始化 go mod 之后,直接 go get 就能安装完毕。

代码语言:javascript
复制
go get github.com/shirou/gopsutil/v3

CPU使用情况

先利用库来显示下当前电脑的 CPU 使用情况:

代码语言:javascript
复制
package main

import (
 "fmt"
 "github.com/shirou/gopsutil/v3/cpu"
 "time"
)
func main()  {
 // 统计间隔,是否取单个还是总的
 p,_ := cpu.Percent(time.Second, false)
 fmt.Println(p)
}

这里我就没处理采集错误的情况了,直接下划线忽略。

第一个参数是统计间隔,你可以根据你的情况传入,秒,分,时都行。

第二个参数为是否获取全部的总的统计,因为现在的电脑基本都是多核了吧,你可以传 true 返回的就是每个 CPU 的使用情况。

这段代码放到 main 方法里面直接执行的结果如下:

代码语言:javascript
复制
$ go run main.go 
[41.54228855767001]

我这里电脑的 CPU 当前使用情况为 41.54%

CPU使用情况

内存信息,全部在 mem 这个模块里面

代码语言:javascript
复制
package main

import (
 "fmt"
 "github.com/shirou/gopsutil/v3/mem"
)

func main()  {

 m,_ := mem.VirtualMemory()
 fmt.Println(m)
}

直接执行就能得到下面一堆信息:

代码语言:javascript
复制
{"total":8589934592,"available":2171953152,"used":6417981440,"usedPercent":74.71513748168945,"free":95838208,"active":2128056320,"inactive":2076114944,"wired":2473566208,"laundry":0,"buffers":0,"cached":0,"writeBack":0,"dirty":0,"writeBackTmp":0,"shared":0,"slab":0,"sreclaimable":0,"sunreclaim":0,"pageTables":0,"swapCached":0,"commitLimit":0,"committedAS":0,"highTotal":0,"highFree":0,"lowTotal":0,"lowFree":0,"swapTotal":0,"swapFree":0,"mapped":0,"vmallocTotal":0,"vmallocUsed":0,"vmallocChunk":0,"hugePagesTotal":0,"hugePagesFree":0,"hugePageSize":0}

美观升级

如果直接这样输出是不是太不美观了,咱们程序员也是追求美观的好不好。

所以我再推荐一个库,用来格式化输出到我们控制台。

官方 Github 库地址:

代码语言:javascript
复制
github.com/olekukonko/tablewriter

看下他的效果:

是不是一下就高大上了许多。

安装使用

在项目下面直接执行 go get :

代码语言:javascript
复制
go get github.com/olekukonko/tablewriter

使用思路很简单,我们需要构建一个二维的数组,然后直接丢给这个库渲染即可。

于是我们把上面的信息一整合就得到了下面的这段代码:

代码语言:javascript
复制
package main

import (
 "fmt"
 "github.com/olekukonko/tablewriter"
 "github.com/shirou/gopsutil/v3/cpu"
 "github.com/shirou/gopsutil/v3/mem"
 "os"
 "time"
)

func main()  {
 
 table := tablewriter.NewWriter(os.Stdout)
 table.SetHeader([]string{"项目", "数量", "百分比"})

 // 间隔,是否取单个还是总的
 p,_ := cpu.Percent(time.Second, false)
 cpuCount,_ := cpu.Counts(true)
 table.Append([]string{"CPU",
  fmt.Sprintf("%d核",cpuCount),
  fmt.Sprintf("%1.f%%",p[0])})

 // 内存信息
 m,_ := mem.VirtualMemory()

 table.Append([]string{"内存",
  fmt.Sprintf("%dG",m.Total/1024/1024/1024),
  fmt.Sprintf("%1.f%%",m.UsedPercent)})

 table.Render()
}

直接运行起来,就能看到下面的图:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoLang全栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 我们用到的库
  • 上代码
    • CPU使用情况
      • CPU使用情况
      • 美观升级
        • 安装使用
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档