1. 简介
除数为浮点数并且值为0时不会引发panic
,此时得到的结果是NaN
是不可以用来进行数学运算和JSON对象序列化反序列化。
下面是对问题复现。
2. 演示
package main
import (
"encoding/json"
"fmt"
)
func main() {
var i int64 = 0
var j int64 = 0
var f float64 = float64(i) / float64(j)
fmt.Println(f) // Output: NaN
// JSON
type Example struct {
F float64
}
data, err := json.Marshal(Example{F: f})
if err != nil {
panic(err)
}
fmt.Println(string(data))
}
Output
NaN
panic: json: unsupported value: NaN
goroutine 1 [running]:
main.main()
/Users/yimt/Code/GoProjects/src/hello-go/main.go:20 +0xe9
3. 除0异常
3.1. 正常情况下
正常除数是0会引起panic
package main
import "fmt"
func main() {
var i int64 = 0
var j int64 = 0
fmt.Println(i / j)
}
Output
panic: runtime error: integer divide by zero
goroutine 1 [running]:
main.main()
/Users/yimt/Code/GoProjects/src/hello-go/main.go:8 +0x11
3.2. 例外情况
除数是0但是没有引起panic
package main
import "fmt"
func main() {
var i int64 = 0
var j int64 = 0
var f float64 = float64(i) / float64(j)
fmt.Println(f)
}
Output
NaN