除数为浮点数并且值为0时不会引发panic,此时得到的结果是NaN是不可以用来进行数学运算和JSON对象序列化反序列化。
下面是对问题复现。
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
正常除数是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
除数是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