Golang标准库——expvar

DevilRoshan · · 460 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

对这些公共变量的读写操作都是原子级的。

为了增加HTTP处理器,本包注册了如下变量:

cmdline   os.Args
memstats  runtime.Memstats

有时候本包被导入只是为了获得本包注册HTTP处理器和上述变量的副作用。此时可以如下方式导入本包:

import _ "expvar"

type Var

type Var interface {
    String() string
}

Var接口是所有导出变量的抽象类型。

type Int

type Int struct {
    i int64
}

Int代表一个64位整数变量,满足Var接口。

func NewInt

func NewInt(name string) *Int

func (*Int) Add

func (v *Int) Add(delta int64)

func (*Int) Set

func (v *Int) Set(value int64)

func (*Int) String

func (v *Int) String() string

type Float

type Float struct {
    f uint64
}

Float代表一个64位浮点数变量,满足Var接口。

func NewFloat

func NewFloat(name string) *Float

func (*Float) Add

func (v *Float) Add(delta float64)

Add adds delta to v.

func (*Float) Set

func (v *Float) Set(value float64)

Set sets v to value.

func (*Float) String

func (v *Float) String() string

type String

type String struct {
    s atomic.Value // string
}

String代表一个字符串变量,满足Var接口。

func NewString

func NewString(name string) *String

func (*String) Set

func (v *String) Set(value string)

func (*String) String

func (v *String) String() string

type Func

type Func func() interface{}

Func通过调用函数并将结果编码为json,实现了Var接口。

func (Func) String

func (f Func) String() string

type KeyValue

type KeyValue struct {
    Key   string
    Value Var
}

KeyValue代表Map中的一条记录。(键值对)

type Map

type Map struct {
    m      sync.Map // map[string]Var
    keysMu sync.RWMutex
    keys   []string // sorted
}

Map代表一个string到Var的映射变量,满足Var接口。

func NewMap

func NewMap(name string) *Map

func (*Map) Init

func (v *Map) Init() *Map

func (*Map) Get

func (v *Map) Get(key string) Var

func (*Map) Set

func (v *Map) Set(key string, av Var)

func (*Map) Add

func (v *Map) Add(key string, delta int64)

func (*Map) AddFloat

func (v *Map) AddFloat(key string, delta float64)

AddFloat向索引key对应的值(底层为*Float)修改为加上delta后的值。

func (*Map) Do

func (v *Map) Do(f func(KeyValue))

Do对映射的每一条记录都调用f。迭代执行时会锁定该映射,但已存在的记录可以同时更新。

func (*Map) String

func (v *Map) String() string

func Get

func Get(name string) Var

Get获取名为name的导出变量。

func Publish

func Publish(name string, v Var)

Publish声明一个导出变量。必须在init函数里调用。如果name已经被注册,会调用log.Panic。

func Do

func Do(f func(KeyValue))

Do对导出变量的每一条记录都调用f。迭代执行时会锁定全局变量映射,但已存在的记录可以同时更新。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:DevilRoshan

查看原文:Golang标准库——expvar

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

460 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传