utils.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package zend
  2. import "reflect"
  3. import "unsafe"
  4. import "log"
  5. func CHKNILOMIT(v interface{}) {}
  6. func CHKNILEXIT(v interface{}, args ...interface{}) {
  7. if v == nil {
  8. if len(args) > 0 {
  9. log.Panicln(args...)
  10. }
  11. panic(v)
  12. }
  13. }
  14. // 看来不可能实现,需要在调用处展开的
  15. func CHKNILRET(v interface{}) (dfn func()) {
  16. dfn = func() {
  17. if r := recover(); r != nil {
  18. }
  19. }
  20. if v == nil || v.(bool) == false {
  21. panic(nil)
  22. }
  23. return
  24. }
  25. // 看来不可能实现,需要在调用处展开的
  26. // 也许两个连用,接近实现return到上层函数的功能,还是很啰嗦。
  27. func RETURN_IF_DECL(v interface{}) {
  28. if v == nil || v.(bool) == false {
  29. panic(nil)
  30. }
  31. }
  32. // defer RETURN_IF_EXEC()()
  33. func RETURN_IF_EXEC(v interface{}) func() {
  34. return func() {
  35. if r := recover(); r != nil {
  36. }
  37. }
  38. }
  39. type Any interface{}
  40. func init() {
  41. // log.SetFlags(log.Llongfile | log.LstdFlags)
  42. log.SetFlags(log.Lshortfile | log.LstdFlags)
  43. log.SetPrefix("[phpgo] ")
  44. }
  45. func TOCIP(v interface{}) unsafe.Pointer {
  46. return unsafe.Pointer(&v)
  47. }
  48. func FROMCIP(p unsafe.Pointer) interface{} {
  49. if p == nil {
  50. return nil
  51. }
  52. rp := (*interface{})(p)
  53. if rp == nil || *rp == nil {
  54. return nil
  55. }
  56. return reflect.ValueOf(*rp).Interface()
  57. }