2020-05-20 18:20补充:

感谢yif同学提供指导,出现错误并且打印大量信息的原因是函数递归调用导致栈溢出。

而导致递归调用的关键代码是%v

  1. 类型实现了error的interface
  2. %v的时候会反射类型,发现实现了error接口,然后调用error的.Error()方法
  3. 结果Error()方法中又使用了%v,导致递归

结论:使用%v打印,一定要了解其背后的反射原理,并避免递归。

(未完待续,还有第二个问题)


先贴代码:

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. )
  6. type MyError struct{
  7. MyErrorCode int
  8. }
  9. func (e *MyError)Error()string{
  10. return fmt.Sprintf("%v", e)
  11. }
  12. func f1()(int32, error){
  13. return 1, nil
  14. }
  15. func f2()(string, *MyError){
  16. return "aaa", &MyError{MyErrorCode:1000}
  17. }
  18. func main(){
  19. a, err := f1()
  20. log.Println(a, err)
  21. b, err := f2()
  22. log.Println(b, err)
  23. }

崩溃信息很长很长:

  1. 2020/05/20 17:14:40 1 <nil>
  2. runtime: goroutine stack exceeds 1000000000-byte limit
  3. runtime: sp=0xc0201612f8 stack=[0xc020160000, 0xc040160000]
  4. fatal error: stack overflow
  5. runtime stack:
  6. runtime.throw(0x6add24, 0xe)
  7. C:/Go/src/runtime/panic.go:1112 +0x79
  8. runtime.newstack()
  9. C:/Go/src/runtime/stack.go:1034 +0x6dc
  10. runtime.morestack()
  11. C:/Go/src/runtime/asm_amd64.s:449 +0x97
  12. goroutine 1 [running]:
  13. runtime.assertE2I2(0x667f20, 0x65eb20, 0xc0000a0848, 0x0, 0x0, 0x0)
  14. C:/Go/src/runtime/iface.go:487 +0xa5 fp=0xc020161308 sp=0xc020161300 pc=0x40a515
  15. fmt.(*pp).handleMethods(0xc005c816c0, 0x76, 0xc020161600)
  16. C:/Go/src/fmt/print.go:594 +0x8f fp=0xc020161578 sp=0xc020161308 pc=0x4be5ff
  17. fmt.(*pp).printArg(0xc005c816c0, 0x65eb20, 0xc0000a0848, 0xc000000076)
  18. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020161610 sp=0xc020161578 pc=0x4bee1b
  19. fmt.(*pp).doPrintf(0xc005c816c0, 0x6ab3b7, 0x2, 0xc020161788, 0x1, 0x1)
  20. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc0201616f8 sp=0xc020161610 pc=0x4c26f1
  21. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020161788, 0x1, 0x1, 0x667ea0, 0x43375d)
  22. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020161750 sp=0xc0201616f8 pc=0x4bb6bd
  23. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  24. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc0201617a8 sp=0xc020161750 pc=0x62c5d7
  25. fmt.(*pp).handleMethods(0xc005c815f0, 0x76, 0xc020161a01)
  26. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020161a18 sp=0xc0201617a8 pc=0x4be752
  27. fmt.(*pp).printArg(0xc005c815f0, 0x65eb20, 0xc0000a0848, 0xc000000076)
  28. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020161ab0 sp=0xc020161a18 pc=0x4bee1b
  29. fmt.(*pp).doPrintf(0xc005c815f0, 0x6ab3b7, 0x2, 0xc020161c28, 0x1, 0x1)
  30. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020161b98 sp=0xc020161ab0 pc=0x4c26f1
  31. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020161c28, 0x1, 0x1, 0x667ea0, 0x43375d)
  32. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020161bf0 sp=0xc020161b98 pc=0x4bb6bd
  33. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  34. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020161c48 sp=0xc020161bf0 pc=0x62c5d7
  35. fmt.(*pp).handleMethods(0xc005c81520, 0x76, 0xc020161f01)
  36. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020161eb8 sp=0xc020161c48 pc=0x4be752
  37. fmt.(*pp).printArg(0xc005c81520, 0x65eb20, 0xc0000a0848, 0xc000000076)
  38. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020161f50 sp=0xc020161eb8 pc=0x4bee1b
  39. fmt.(*pp).doPrintf(0xc005c81520, 0x6ab3b7, 0x2, 0xc0201620c8, 0x1, 0x1)
  40. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020162038 sp=0xc020161f50 pc=0x4c26f1
  41. fmt.Sprintf(0x6ab3b7, 0x2, 0xc0201620c8, 0x1, 0x1, 0x667ea0, 0x43375d)
  42. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020162090 sp=0xc020162038 pc=0x4bb6bd
  43. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  44. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc0201620e8 sp=0xc020162090 pc=0x62c5d7
  45. fmt.(*pp).handleMethods(0xc005c81450, 0x76, 0xc020162401)
  46. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020162358 sp=0xc0201620e8 pc=0x4be752
  47. fmt.(*pp).printArg(0xc005c81450, 0x65eb20, 0xc0000a0848, 0xc000000076)
  48. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc0201623f0 sp=0xc020162358 pc=0x4bee1b
  49. fmt.(*pp).doPrintf(0xc005c81450, 0x6ab3b7, 0x2, 0xc020162568, 0x1, 0x1)
  50. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc0201624d8 sp=0xc0201623f0 pc=0x4c26f1
  51. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020162568, 0x1, 0x1, 0x667ea0, 0x43375d)
  52. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020162530 sp=0xc0201624d8 pc=0x4bb6bd
  53. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  54. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020162588 sp=0xc020162530 pc=0x62c5d7
  55. fmt.(*pp).handleMethods(0xc005c81380, 0x76, 0xc020162801)
  56. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc0201627f8 sp=0xc020162588 pc=0x4be752
  57. fmt.(*pp).printArg(0xc005c81380, 0x65eb20, 0xc0000a0848, 0xc000000076)
  58. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020162890 sp=0xc0201627f8 pc=0x4bee1b
  59. fmt.(*pp).doPrintf(0xc005c81380, 0x6ab3b7, 0x2, 0xc020162a08, 0x1, 0x1)
  60. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020162978 sp=0xc020162890 pc=0x4c26f1
  61. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020162a08, 0x1, 0x1, 0x667ea0, 0x43375d)
  62. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc0201629d0 sp=0xc020162978 pc=0x4bb6bd
  63. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  64. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020162a28 sp=0xc0201629d0 pc=0x62c5d7
  65. fmt.(*pp).handleMethods(0xc005c812b0, 0x76, 0xc020162d01)
  66. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020162c98 sp=0xc020162a28 pc=0x4be752
  67. fmt.(*pp).printArg(0xc005c812b0, 0x65eb20, 0xc0000a0848, 0xc000000076)
  68. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020162d30 sp=0xc020162c98 pc=0x4bee1b
  69. fmt.(*pp).doPrintf(0xc005c812b0, 0x6ab3b7, 0x2, 0xc020162ea8, 0x1, 0x1)
  70. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020162e18 sp=0xc020162d30 pc=0x4c26f1
  71. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020162ea8, 0x1, 0x1, 0x667ea0, 0x43375d)
  72. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020162e70 sp=0xc020162e18 pc=0x4bb6bd
  73. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  74. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020162ec8 sp=0xc020162e70 pc=0x62c5d7
  75. fmt.(*pp).handleMethods(0xc005c811e0, 0x76, 0xc020163101)
  76. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020163138 sp=0xc020162ec8 pc=0x4be752
  77. fmt.(*pp).printArg(0xc005c811e0, 0x65eb20, 0xc0000a0848, 0xc000000076)
  78. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc0201631d0 sp=0xc020163138 pc=0x4bee1b
  79. fmt.(*pp).doPrintf(0xc005c811e0, 0x6ab3b7, 0x2, 0xc020163348, 0x1, 0x1)
  80. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc0201632b8 sp=0xc0201631d0 pc=0x4c26f1
  81. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020163348, 0x1, 0x1, 0x667ea0, 0x43375d)
  82. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020163310 sp=0xc0201632b8 pc=0x4bb6bd
  83. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  84. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020163368 sp=0xc020163310 pc=0x62c5d7
  85. fmt.(*pp).handleMethods(0xc005c81110, 0x76, 0xc020163601)
  86. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc0201635d8 sp=0xc020163368 pc=0x4be752
  87. fmt.(*pp).printArg(0xc005c81110, 0x65eb20, 0xc0000a0848, 0xc000000076)
  88. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020163670 sp=0xc0201635d8 pc=0x4bee1b
  89. fmt.(*pp).doPrintf(0xc005c81110, 0x6ab3b7, 0x2, 0xc0201637e8, 0x1, 0x1)
  90. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020163758 sp=0xc020163670 pc=0x4c26f1
  91. fmt.Sprintf(0x6ab3b7, 0x2, 0xc0201637e8, 0x1, 0x1, 0x667ea0, 0x43375d)
  92. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc0201637b0 sp=0xc020163758 pc=0x4bb6bd
  93. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  94. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020163808 sp=0xc0201637b0 pc=0x62c5d7
  95. fmt.(*pp).handleMethods(0xc005c81040, 0x76, 0xc020163b01)
  96. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020163a78 sp=0xc020163808 pc=0x4be752
  97. fmt.(*pp).printArg(0xc005c81040, 0x65eb20, 0xc0000a0848, 0xc000000076)
  98. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020163b10 sp=0xc020163a78 pc=0x4bee1b
  99. fmt.(*pp).doPrintf(0xc005c81040, 0x6ab3b7, 0x2, 0xc020163c88, 0x1, 0x1)
  100. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020163bf8 sp=0xc020163b10 pc=0x4c26f1
  101. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020163c88, 0x1, 0x1, 0x667ea0, 0x43375d)
  102. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020163c50 sp=0xc020163bf8 pc=0x4bb6bd
  103. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  104. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020163ca8 sp=0xc020163c50 pc=0x62c5d7
  105. fmt.(*pp).handleMethods(0xc005c80f70, 0x76, 0xc020163f01)
  106. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020163f18 sp=0xc020163ca8 pc=0x4be752
  107. fmt.(*pp).printArg(0xc005c80f70, 0x65eb20, 0xc0000a0848, 0xc000000076)
  108. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020163fb0 sp=0xc020163f18 pc=0x4bee1b
  109. fmt.(*pp).doPrintf(0xc005c80f70, 0x6ab3b7, 0x2, 0xc020164128, 0x1, 0x1)
  110. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020164098 sp=0xc020163fb0 pc=0x4c26f1
  111. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020164128, 0x1, 0x1, 0x667ea0, 0x43375d)
  112. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc0201640f0 sp=0xc020164098 pc=0x4bb6bd
  113. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  114. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020164148 sp=0xc0201640f0 pc=0x62c5d7
  115. fmt.(*pp).handleMethods(0xc005c80ea0, 0x76, 0xc020164401)
  116. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc0201643b8 sp=0xc020164148 pc=0x4be752
  117. fmt.(*pp).printArg(0xc005c80ea0, 0x65eb20, 0xc0000a0848, 0xc000000076)
  118. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020164450 sp=0xc0201643b8 pc=0x4bee1b
  119. fmt.(*pp).doPrintf(0xc005c80ea0, 0x6ab3b7, 0x2, 0xc0201645c8, 0x1, 0x1)
  120. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020164538 sp=0xc020164450 pc=0x4c26f1
  121. fmt.Sprintf(0x6ab3b7, 0x2, 0xc0201645c8, 0x1, 0x1, 0x667ea0, 0x43375d)
  122. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020164590 sp=0xc020164538 pc=0x4bb6bd
  123. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  124. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc0201645e8 sp=0xc020164590 pc=0x62c5d7
  125. fmt.(*pp).handleMethods(0xc005c80dd0, 0x76, 0xc020164901)
  126. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020164858 sp=0xc0201645e8 pc=0x4be752
  127. fmt.(*pp).printArg(0xc005c80dd0, 0x65eb20, 0xc0000a0848, 0xc000000076)
  128. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc0201648f0 sp=0xc020164858 pc=0x4bee1b
  129. fmt.(*pp).doPrintf(0xc005c80dd0, 0x6ab3b7, 0x2, 0xc020164a68, 0x1, 0x1)
  130. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc0201649d8 sp=0xc0201648f0 pc=0x4c26f1
  131. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020164a68, 0x1, 0x1, 0x667ea0, 0x43375d)
  132. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020164a30 sp=0xc0201649d8 pc=0x4bb6bd
  133. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  134. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020164a88 sp=0xc020164a30 pc=0x62c5d7
  135. fmt.(*pp).handleMethods(0xc005c80d00, 0x76, 0xc020164d01)
  136. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020164cf8 sp=0xc020164a88 pc=0x4be752
  137. fmt.(*pp).printArg(0xc005c80d00, 0x65eb20, 0xc0000a0848, 0xc000000076)
  138. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020164d90 sp=0xc020164cf8 pc=0x4bee1b
  139. fmt.(*pp).doPrintf(0xc005c80d00, 0x6ab3b7, 0x2, 0xc020164f08, 0x1, 0x1)
  140. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020164e78 sp=0xc020164d90 pc=0x4c26f1
  141. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020164f08, 0x1, 0x1, 0x667ea0, 0x43375d)
  142. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020164ed0 sp=0xc020164e78 pc=0x4bb6bd
  143. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  144. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020164f28 sp=0xc020164ed0 pc=0x62c5d7
  145. fmt.(*pp).handleMethods(0xc005c80c30, 0x76, 0xc020165201)
  146. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020165198 sp=0xc020164f28 pc=0x4be752
  147. fmt.(*pp).printArg(0xc005c80c30, 0x65eb20, 0xc0000a0848, 0xc000000076)
  148. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020165230 sp=0xc020165198 pc=0x4bee1b
  149. fmt.(*pp).doPrintf(0xc005c80c30, 0x6ab3b7, 0x2, 0xc0201653a8, 0x1, 0x1)
  150. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020165318 sp=0xc020165230 pc=0x4c26f1
  151. fmt.Sprintf(0x6ab3b7, 0x2, 0xc0201653a8, 0x1, 0x1, 0x667ea0, 0x43375d)
  152. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020165370 sp=0xc020165318 pc=0x4bb6bd
  153. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  154. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc0201653c8 sp=0xc020165370 pc=0x62c5d7
  155. fmt.(*pp).handleMethods(0xc005c80b60, 0x76, 0xc020165601)
  156. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020165638 sp=0xc0201653c8 pc=0x4be752
  157. fmt.(*pp).printArg(0xc005c80b60, 0x65eb20, 0xc0000a0848, 0xc000000076)
  158. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc0201656d0 sp=0xc020165638 pc=0x4bee1b
  159. fmt.(*pp).doPrintf(0xc005c80b60, 0x6ab3b7, 0x2, 0xc020165848, 0x1, 0x1)
  160. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc0201657b8 sp=0xc0201656d0 pc=0x4c26f1
  161. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020165848, 0x1, 0x1, 0x667ea0, 0x43375d)
  162. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020165810 sp=0xc0201657b8 pc=0x4bb6bd
  163. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  164. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020165868 sp=0xc020165810 pc=0x62c5d7
  165. fmt.(*pp).handleMethods(0xc005c80a90, 0x76, 0xc020165b01)
  166. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020165ad8 sp=0xc020165868 pc=0x4be752
  167. fmt.(*pp).printArg(0xc005c80a90, 0x65eb20, 0xc0000a0848, 0xc000000076)
  168. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020165b70 sp=0xc020165ad8 pc=0x4bee1b
  169. fmt.(*pp).doPrintf(0xc005c80a90, 0x6ab3b7, 0x2, 0xc020165ce8, 0x1, 0x1)
  170. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020165c58 sp=0xc020165b70 pc=0x4c26f1
  171. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020165ce8, 0x1, 0x1, 0x667ea0, 0x43375d)
  172. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020165cb0 sp=0xc020165c58 pc=0x4bb6bd
  173. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  174. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020165d08 sp=0xc020165cb0 pc=0x62c5d7
  175. fmt.(*pp).handleMethods(0xc005c809c0, 0x76, 0xc020166001)
  176. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020165f78 sp=0xc020165d08 pc=0x4be752
  177. fmt.(*pp).printArg(0xc005c809c0, 0x65eb20, 0xc0000a0848, 0xc000000076)
  178. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020166010 sp=0xc020165f78 pc=0x4bee1b
  179. fmt.(*pp).doPrintf(0xc005c809c0, 0x6ab3b7, 0x2, 0xc020166188, 0x1, 0x1)
  180. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc0201660f8 sp=0xc020166010 pc=0x4c26f1
  181. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020166188, 0x1, 0x1, 0x667ea0, 0x43375d)
  182. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020166150 sp=0xc0201660f8 pc=0x4bb6bd
  183. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  184. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc0201661a8 sp=0xc020166150 pc=0x62c5d7
  185. fmt.(*pp).handleMethods(0xc005c808f0, 0x76, 0xc020166401)
  186. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020166418 sp=0xc0201661a8 pc=0x4be752
  187. fmt.(*pp).printArg(0xc005c808f0, 0x65eb20, 0xc0000a0848, 0xc000000076)
  188. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc0201664b0 sp=0xc020166418 pc=0x4bee1b
  189. fmt.(*pp).doPrintf(0xc005c808f0, 0x6ab3b7, 0x2, 0xc020166628, 0x1, 0x1)
  190. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020166598 sp=0xc0201664b0 pc=0x4c26f1
  191. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020166628, 0x1, 0x1, 0x667ea0, 0x43375d)
  192. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc0201665f0 sp=0xc020166598 pc=0x4bb6bd
  193. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  194. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020166648 sp=0xc0201665f0 pc=0x62c5d7
  195. fmt.(*pp).handleMethods(0xc005c80820, 0x76, 0xc020166901)
  196. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc0201668b8 sp=0xc020166648 pc=0x4be752
  197. fmt.(*pp).printArg(0xc005c80820, 0x65eb20, 0xc0000a0848, 0xc000000076)
  198. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020166950 sp=0xc0201668b8 pc=0x4bee1b
  199. fmt.(*pp).doPrintf(0xc005c80820, 0x6ab3b7, 0x2, 0xc020166ac8, 0x1, 0x1)
  200. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020166a38 sp=0xc020166950 pc=0x4c26f1
  201. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020166ac8, 0x1, 0x1, 0x667ea0, 0x43375d)
  202. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020166a90 sp=0xc020166a38 pc=0x4bb6bd
  203. main.(*MyError).Error(0xc0000a0848, 0x65eb20, 0xc0000a0848)
  204. D:/source/ahfuzhang/test/report.go:16 +0x77 fp=0xc020166ae8 sp=0xc020166a90 pc=0x62c5d7
  205. fmt.(*pp).handleMethods(0xc005c80750, 0x76, 0xc020166e01)
  206. C:/Go/src/fmt/print.go:624 +0x1e2 fp=0xc020166d58 sp=0xc020166ae8 pc=0x4be752
  207. fmt.(*pp).printArg(0xc005c80750, 0x65eb20, 0xc0000a0848, 0xc000000076)
  208. C:/Go/src/fmt/print.go:713 +0x1eb fp=0xc020166df0 sp=0xc020166d58 pc=0x4bee1b
  209. fmt.(*pp).doPrintf(0xc005c80750, 0x6ab3b7, 0x2, 0xc020166f68, 0x1, 0x1)
  210. C:/Go/src/fmt/print.go:1030 +0x161 fp=0xc020166ed8 sp=0xc020166df0 pc=0x4c26f1
  211. fmt.Sprintf(0x6ab3b7, 0x2, 0xc020166f68, 0x1, 0x1, 0x667ea0, 0x43375d)
  212. C:/Go/src/fmt/print.go:219 +0x6d fp=0xc020166f30 sp=0xc020166ed8 pc=0x4bb6bd
  213. ...additional frames elided...
  214. Process finished with exit code 2
  • 1.原来有个error类型的err, 然后我把*MyError类型赋值给err,这个是我不小心,我认
  • 2.MyError虽然实现了接口,但是赋值的时候为什么编译期不能检查出来?
  • 3.崩溃信息为何会那么长?

【记录一个问题】神坑,自定义一个golang的error类型,居然运行崩溃了的更多相关文章

  1. Qt中如何写一个model(自定义一个RowNode,我没有碰到过)

    在qt中,用到最多就是model/view的结构来表示数据层及表示层的关系.model用于给view提供数据.那如何来实现一个简单的树形model呢. 实现一个自己的model需要重载以下的方法: Q ...

  2. jQuery Validate 表单验证插件----自定义一个验证方法

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...

  3. golang开发:Error的使用

    Error是Go语言开发中最基础也是最重要的部分,跟其他语言的try catch的作用基本一致,想想在PHP JAVA开发中,try catch 不会使用,或者使用不灵活,就无法感知到程序运行中出现了 ...

  4. 【OpenWRT之旅】如何自定义一个配置文件的设置界面

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1. 引言 OpenWRT中采用LuCI作为它的Web interface界面框架,采用Lua语言.在本文中将以 ...

  5. Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、

    LineNumberReader 跟综行号的缓冲字符输入流,些类定义了setLineNumber(int)和getLineNumber(int),它们可分别用于设置和获取当前行号 import jav ...

  6. 在Dynamics CRM中自定义一个通用的查看编辑注释页面

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复162或者20151016可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 注释在CRM中的显示是比较特别, ...

  7. SpringMVC 自定义一个拦截器

    自定义一个拦截器方法,实现HandlerInterceptor方法 public class FirstInterceptor implements HandlerInterceptor{ /** * ...

  8. Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例

    利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...

  9. JSTL,自定义一个标签的功能案例

    1.自定义一个带有两个属性的标签<max>,用于计算并输出两个数的最大值: 2.自定义一个带有一个属性的标签<lxn:readFile  src=“”>,用于输出指定文件的内容 ...

随机推荐

  1. django的Cookie Session

    Cookie 初识cookie的设置和获取 示例 from django.shortcuts import render, redirect from django.shortcuts import ...

  2. 【Java例题】5.2 数组转换

    2. 有一个一维数组由键盘输入,据输入的m和n,将其转换为m*n的二维数组. package chapter5; import java.util.Scanner; public class demo ...

  3. Chapter 4 Effect Modification

    目录 4.1 Definition of effect modification 4.2 Stratification to identify effect modification 4.3 Why ...

  4. C++ std-11 常用方法

    对多个值取最值 C++标准库提供了获取最大值和最小值的方法: int mi = std::min(x1, x2); int ma = std::max(x1, x2); 如果想获取超过两个数的最值呢? ...

  5. 【jvm】06-new一个对象到底占了多少内存?

    [jvm]06-new一个对象到底占了多少内存? 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺 ...

  6. Java实习生常规技术面试题每日十题Java基础(一)

    目录 1.Java 的 "一次编写,处处运行"如何实现? 2.描述JVM运行原理. 3.为什么Java没有全局变量? 4.说明一下public static void main(S ...

  7. 编写Java程序,模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员。教练员包括乒乓球教练和篮球教练。为了方便出国交流,根乒乓球相关的人员都需要学习英语。

    需求说明: 模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员.教练员包括乒乓球教练和篮球教练.为了方便出国交流,根乒乓球相关的人员都需要学习英语.具体分析如下: (1)共同的属性 ...

  8. Java常用的开发库推荐

    我是3y,一年CRUD经验用十年的markdown程序员‍ 今天来讲讲来给大家聊聊开发提速的东西了:工具包.Lombok和常用库 01.什么是工具包 基本上,每个项目里都有一个包,叫做utils.这个 ...

  9. PHP 中的僵尸进程、孤儿进程详解

    僵尸进程 当子进程运行结束,父进程仍然继续运行,但父进程没有对子进程进行回收,释放子进程占用的资源,此时子进程就成为了一个僵尸进程. 在Unix进程管理中,如果新开的子进程运行结束,父进程将会收到一个 ...

  10. css 文本基础 实战 小米官方卡片案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...