美文网首页
Golang标准库——expvar

Golang标准库——expvar

作者: DevilRoshan | 来源:发表于2020-10-08 19:18 被阅读0次

    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。迭代执行时会锁定全局变量映射,但已存在的记录可以同时更新。

    相关文章

      网友评论

          本文标题:Golang标准库——expvar

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