美文网首页
Golang expvar原理

Golang expvar原理

作者: huiwq1990 | 来源:发表于2019-12-11 21:02 被阅读0次

前言

在学习go的metric的过程中,有些实现支持prometheus、expvar等,expvar是什么,竟然在sdk的库中?另外,发现jaeger(github.com/uber/jaeger-lib)也支持这种metric数据暴露方式。

分析

expvar提供将变量暴露出去的机制(暴露到http接口等),java中也有类似的机制。

原理

go默认创建一个全局并发安全的map,可以将key为string,val为实现Var的实例保存进去;同时,将所有的key保存到列表中。
http暴露原理,注册http接口到默认的mutex中,返回数据是所有key,val的结果。

实现

expvar.Int实现接口Var,创建Int时,会将实例添加到map,并将key设置到list中。

func NewInt(name string) *Int {
    v := new(Int)
    Publish(name, v)
    return v
}
func Publish(name string, v Var) {
    if _, dup := vars.LoadOrStore(name, v); dup {
        log.Panicln("Reuse of exported var name:", name)
    }
    varKeysMu.Lock()
    defer varKeysMu.Unlock()
    varKeys = append(varKeys, name)
    sort.Strings(varKeys)
}

测试demo

package main

import (
    "expvar"
    "fmt"
    "net/http"
    "time"
)
// curl localhost:8080/debug/vars
func main()  {
    reqs := expvar.NewInt("requests")
    ticker:=time.NewTicker(time.Second)
    go func() {
        for _=range ticker.C {
            reqs.Add(1)
        }
    }()
    bingAddr := fmt.Sprintf("0.0.0.0:8080")
    http.ListenAndServe(bingAddr,http.DefaultServeMux)
}

相关文章

  • Golang expvar原理

    前言 在学习go的metric的过程中,有些实现支持prometheus、expvar等,expvar是什么,竟然...

  • golang标准库中的expvar包

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

  • golang expvar的坑

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

  • Golang标准库——expvar

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

  • Golang 公共变量包——expvar

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

  • golang

    golang携程调度,runtime包 golang内存模型 csp原理 context的原理 slice底层结构...

  • Golang之Defer

    引用 golang defer实现原理 Golang之轻松化解defer的温柔陷阱 Golang中defer、re...

  • 红黑树的原理详解及golang实现

    # 红黑树原理详解及golang实现

  • Golang源码之Channel

    引用 图解Golang的channel底层原理 深入理解Golang Channel Go语言设计与实现-Chan...

  • AES代码实现-Golang源码

    引流 : AES 原理 / DES 原理和Golang实现 / 个人主页参考 : 标准AES-FIPS197 ...

网友评论

      本文标题:Golang expvar原理

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