运行
```go
package main
import (
"fmt"
)
func div(x, y int) int {
return x / y
}
func main() {
fmt.Println(div(1, 0))
}
```
得到
```
panic: runtime error: integer divide by zero
goroutine 1 [running]:
main.div(...)
/tmp/sandbox845991998/prog.go:8
main.main()
/tmp/sandbox845991998/prog.go:12 +0x20
Program exited: status 2.
```
请问上面的 `+0x20` 是什么意思?0x20 即 32。猜测过 column、byte position、错误代码,都不像。网上搜索也没看到有解释的。
---
https://play.golang.org/p/Du0WQKYyaNy
更多评论
特地去扒了下源码。。
https://golang.org/src/runtime/traceback.go#L661
```golang
print("\t", file, ":", line)
if pc > f.entry {
print(" +", hex(pc-f.entry))
}
```
`hex(pc-f.entry)`
向上追踪这两个变量
https://golang.org/src/runtime/traceback.go#L654
```golang
pc := gp.gopc
f := findfunc(pc)
```
字段注释如下
`gp.gopc // pc of go statement that created this goroutine`
`f.entry // start pc`
#1
这里pc是program counter的意思。
应该也是用来定位引起panic代码的位置。
类似行号精确到行,这个是在二进制指令底层这个精确度做定位。
#3