expvarIndentMap.go 536 B

1234567891011121314151617181920212223242526272829303132333435
  1. package missinggo
  2. import (
  3. "bytes"
  4. "expvar"
  5. "fmt"
  6. )
  7. type IndentMap struct {
  8. expvar.Map
  9. }
  10. var _ expvar.Var = (*IndentMap)(nil)
  11. func NewExpvarIndentMap(name string) *IndentMap {
  12. v := new(IndentMap)
  13. v.Init()
  14. expvar.Publish(name, v)
  15. return v
  16. }
  17. func (v *IndentMap) String() string {
  18. var b bytes.Buffer
  19. fmt.Fprintf(&b, "{")
  20. first := true
  21. v.Do(func(kv expvar.KeyValue) {
  22. if !first {
  23. fmt.Fprintf(&b, ",")
  24. }
  25. fmt.Fprintf(&b, "\n\t%q: %v", kv.Key, kv.Value)
  26. first = false
  27. })
  28. fmt.Fprintf(&b, "}")
  29. return b.String()
  30. }