内容简介:1、golang中expvar包是什么?2、expvar包的作用是什么?3、expvar包有哪些内容?怎么使用?
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)
}
}
以上所述就是小编给大家介绍的《golang标准库中的expvar包》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 中兴通讯助力DevOps标准发布,喜获标准工作组成员授牌
- CODING 受邀参与 DevOps 标准体系之系统和工具 & 技术运营标准技术专家研讨会
- 中国电子技术标准化研究院雷虎:以标准为依托,构建区块链测试生态
- 倚博科技成为 DevOps/AIOps 标准工作组成员,助力国家DevOps/AIOps标准体系建设与落地
- C# 标准性能测试
- Python标准库一览
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。