美文网首页go语言Go知识库
golang标准库中的expvar包

golang标准库中的expvar包

作者: ljh123 | 来源:发表于2018-12-12 22:29 被阅读1次

1、golang中expvar包是什么?
2、expvar包的作用是什么?
3、expvar包有哪些内容?怎么使用?

今天学习到expvar,第一次接触这个包,包名和相关知识眼生,看了半天云里雾里的。
一、golang中expvar包是什么?
expvar包提供了公共变量的标准接口,如服务的操作计数器。本包通过HTTP在/debug/vars位置以JSON格式导出了这些变量。
为了增加HTTP处理器,本包注册了如下变量:
cmdline os.Args
memstats runtime.Memstats

这个包可以辅助调试全局变量。支持一些常见的类型:float64、int64、map、string。

二、expvar包的作用是什么?
1、它支持对变量的基本操作、修改、查询这些。
2、整形类型,可以用来做计数器。
3、操作都是协程安全的。
4、此外还提供了调试接口,/debug/vars。它能够展示所有通过这个包创建的变量。

三、expvar包有哪些内容?怎么使用?

"公共变量"即Var是一个实现了String()函数的接口,定义如下

type Var interface {
      String() string
}

实际类型的Var包括:Int、Float、String和Map,每个具体的类型都包含这几个函数:

1)New*()  //  新建一个变量
2)Set(*)   //  设置这个变量
3)Add(*)  //  在原有变量上加上另一个变量
4)String()  // 实现Var接口
除此之外,Map还有几个特有的函数:
1)Init()                  // 初始化Map
2)Get(key string)  // 根据key获取value
3)Do(f func(Key Value))  // 对Map中的每对key/value执行函数f

所有对Var的设置和修改都是原子和修改都是原子操作。

案例代码

package main

import (
    "expvar"
    "fmt"
    "net/http"
    "log"
)

func kvFunc(kv expvar.KeyValue) {
    fmt.Println(kv.Key, kv.Value)
}

func main() {
    inerInt := int64(10)
    pubInt := expvar.NewInt("Int")
    pubInt.Set(inerInt)
    pubInt.Add(2)

    inerFloat := 1.2
    pubFloat := expvar.NewFloat("Float")
    pubFloat.Set(inerFloat)
    pubFloat.Add(0.1)

    inerString := "hello"
    pubString := expvar.NewString(inerString)
    pubString.Set(inerString)

    pubMap := expvar.NewMap("Map").Init()
    pubMap.Set("Int", pubInt)
    pubMap.Set("Float", pubFloat)
    pubMap.Set("String", pubString)
    pubMap.Do(kvFunc)
    pubMap.Add("Int", 1)
    pubMap.Add("NewInt", 123)
    pubMap.AddFloat("Float", 0.5)
    pubMap.AddFloat("NewFloat", 0.9)
    pubMap.Do(kvFunc)

    expvar.Do(kvFunc)
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "hello")
    })
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatalln(err)
    }
}

相关链接:
1)https://github.com/astaxie/gopkg/blob/master/expvar
2)https://blog.csdn.net/jeffrey11223/article/details/78886923/
3)https://www.jianshu.com/p/330512971c86
4)http://blog.studygolang.com/2017/06/expvar-in-action/

相关文章

  • golang标准库中的expvar包

    1、golang中expvar包是什么?2、expvar包的作用是什么?3、expvar包有哪些内容?怎么使用? ...

  • Golang标准库——expvar

    expvar包提供了公共变量的标准接口,如服务的操作计数器。本包通过HTTP在/debug/vars位置以JSON...

  • golang expvar的坑

    概述 golang标准库expvar包提供一个全局变量的一个包,是线程安全的,主要功能可以存储一些简单的数据比如a...

  • Golang 公共变量包——expvar

    写在前面 expvar包是 Golang 官方提供的公共变量包,它可以辅助调试全局变量。支持一些常见的类型:flo...

  • golang标准库中的error包

    1、这个包有什么内容?以及怎么使用? 一、这个包很简单,为开发者提供了一个New方法func New(text s...

  • golang标准库中的sort包

    一、sort包的内容,以及使用sort包提供了排序切片和用户自定义数据集以及相关功能的函数。 sort包主要针对[...

  • Gin框架与《Web Development with Go》实

    golang的标准web开发 使用golang的标准库net/http包开发web应用是非常简单的。对于此部分内容...

  • Golang WebAssembly 前端开发 - 2. Gol

    函数调用 Golang 标准库中的 syscall/js 包提供了一系列接口。其中 js.Global() 返回一...

  • golang中bytes包

    golang标准库中提供了bytes包,该包几乎和strings包给string提供的功能,只不过bytes包对应...

  • golang标准库中的encoding/gob包

    一、golang中的gob包是什么? gob是golang包自带的一个数据结构序列化的编码/解码工具。 二、go标...

网友评论

    本文标题:golang标准库中的expvar包

    本文链接:https://www.haomeiwen.com/subject/ilaphqtx.html