helpers.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // package helpers -- содержит всякие полезняшки.
  2. //
  3. // Пакет импортировать где нужно в нотации `. "gitlab.c2g.pw/back/uaj-abstract-client/pkg/helpers"`
  4. package helpers
  5. import (
  6. "fmt"
  7. "log"
  8. "os"
  9. "time"
  10. )
  11. var (
  12. IsStageLocal bool
  13. IsStageProd bool
  14. )
  15. // FnAssert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
  16. //
  17. // (isCond bool, msgFormat string, args ...any)
  18. type FnAssert func(isCond bool, msgFormat string, args ...any)
  19. // Assert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
  20. func Assert(isCond bool, msgFormat string, args ...any) {
  21. if isCond {
  22. return
  23. }
  24. msg := fmt.Sprintf("SOFT ASSERT "+msgFormat+"\n", args...)
  25. if IsStageLocal {
  26. panic(msg)
  27. }
  28. log.Print(msg)
  29. }
  30. // FnHassert -- проверяет с жёстким падением условие.
  31. //
  32. // (isCond bool, msgFormat string, args ...any)
  33. type FnHassert func(isCond bool, msgFormat string, args ...any)
  34. // Hassert -- проверка на правильность утверждения с безусловным падением в панику (hard assert).
  35. func Hassert(isCond bool, msgFormat string, args ...any) {
  36. if isCond {
  37. return
  38. }
  39. msg := fmt.Sprintf("HARD ASSERT "+msgFormat+"\n", args...)
  40. panic(msg)
  41. }
  42. // TimeNow -- возвращает локальное Unix сейчас-время (мсек, не зависит от положения).
  43. //
  44. //go:fix inline
  45. func TimeNow() int64 {
  46. timeNow := time.Now().Local().UnixMilli()
  47. return timeNow
  48. }
  49. // SleepMs -- спит миллисекунду (иногда бывает полезно).
  50. //
  51. //go:fix inline
  52. func SleepMs() {
  53. time.Sleep(time.Millisecond * 1)
  54. }
  55. func init_() {
  56. strStage := os.Getenv("STAGE")
  57. switch strStage {
  58. case "local":
  59. IsStageLocal = true
  60. IsStageProd = false
  61. case "prod":
  62. IsStageProd = true
  63. IsStageLocal = false
  64. case "":
  65. IsStageLocal = true
  66. IsStageProd = false
  67. default:
  68. panic(fmt.Sprintf("lepers.init_(): unknown env STAGE (%v)\n", strStage))
  69. }
  70. }
  71. func init() {
  72. init_()
  73. }