assert.go 815 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package debug
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. const (
  7. envAssertPanic = "GO_PROMPT_ENABLE_ASSERT"
  8. )
  9. var (
  10. enableAssert bool
  11. )
  12. func init() {
  13. if e := os.Getenv(envAssertPanic); e == "true" || e == "1" {
  14. enableAssert = true
  15. }
  16. }
  17. // Assert ensures expected condition.
  18. func Assert(cond bool, msg interface{}) {
  19. if cond {
  20. return
  21. }
  22. if enableAssert {
  23. panic(msg)
  24. }
  25. writeWithSync(2, "[ASSERT] "+toString(msg))
  26. }
  27. func toString(v interface{}) string {
  28. switch a := v.(type) {
  29. case func() string:
  30. return a()
  31. case string:
  32. return a
  33. case fmt.Stringer:
  34. return a.String()
  35. default:
  36. return fmt.Sprintf("unexpected type, %t", v)
  37. }
  38. }
  39. // AssertNoError ensures err is nil.
  40. func AssertNoError(err error) {
  41. if err == nil {
  42. return
  43. }
  44. if enableAssert {
  45. panic(err)
  46. }
  47. writeWithSync(2, "[ASSERT] "+err.Error())
  48. }