| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // panic_defer_convint.go
- package main
- import (
- "fmt"
- "math"
- )
- func main() {
- l := int64(15000)
- if i, err := IntFromInt64(l); err != nil {
- fmt.Printf("The conversion of %d to an int32 resulted in an error: %s", l, err.Error())
- } else {
- fmt.Printf("%d converted to an int32 is %d", l, i)
- }
- fmt.Println()
- l = int64(math.MaxInt32 + 15000)
- if i, err := IntFromInt64(l); err != nil {
- fmt.Printf("The conversion of %d to an int32 resulted in an error: %s", l, err.Error())
- } else {
- fmt.Printf("%d converted to an int32 is %d", l, i)
- }
- }
- func ConvertInt64ToInt(l int64) int {
- if math.MinInt32 <= l && l <= math.MaxInt32 {
- return int(l)
- }
- panic(fmt.Sprintf("%d is out of the int32 range", l))
- }
- func IntFromInt64(l int64) (i int, err error) {
- defer func() {
- if e := recover(); e != nil {
- err = fmt.Errorf("%v", e)
- }
- }()
- i = ConvertInt64ToInt(l)
- return i, nil
- }
- /* Output:
- 15000 converted to an int32 is 15000
- The conversion of 2147498647 to an int32 resulted in an error: 2147498647 is out of the int32 range
- */
|