expvar
包提供了一种在运行时公开程序内部变量的方法,以便进行监控和调试。以下是一个示例代码,展示了如何使用 expvar
包:
package main
import (
"expvar"
"fmt"
"net/http"
)
func main() {
// 定义一个 expvar.Int 变量
counter := expvar.NewInt("counter")
// 设置一个 HTTP 处理函数,用于增加计数器的值
http.HandleFunc("/increment", func(w http.ResponseWriter, r *http.Request) {
counter.Add(1)
fmt.Fprintf(w, "Counter incremented")
})
// 设置一个 HTTP 处理函数,用于获取计数器的值
http.HandleFunc("/value", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Counter value: %d", counter.Value())
})
// 启动 HTTP 服务器
http.ListenAndServe(":8080", nil)
}
在这个示例中,我们首先导入了需要使用的包,包括 expvar
、fmt
和 net/http
。
然后,在 main()
函数中,我们使用 expvar.NewInt()
函数创建了一个名为 counter
的 expvar.Int
变量。这个变量被用作计数器。
接下来,我们设置了两个 HTTP 处理函数。第一个处理函数 /increment
用于增加计数器的值,它在每次请求时通过调用 counter.Add(1)
来增加计数器的值。第二个处理函数 /value
用于获取计数器的值,它通过调用 counter.Value()
来获取计数器的当前值,并将其返回给客户端。
最后,我们使用 http.ListenAndServe()
函数启动了一个简单的 HTTP 服务器,监听端口 8080
。这样,我们就可以通过访问 /increment
和 /value
路径来增加计数器的值和获取计数器的值。
要运行这个示例,可以在命令行中使用以下命令:
go run main.go
然后,在浏览器或使用工具如 cURL 访问 http://localhost:8080/increment
来增加计数器的值,再访问 http://localhost:8080/value
来获取计数器的值。
通过使用 expvar
包,我们可以在运行时公开程序内部的变量,并通过 HTTP 接口访问这些变量。这对于监控和调试程序非常有用,可以方便地获取和观察程序的内部状态。