You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用errors.Is判断ParseInt类型错误是否为strconv.NumError?

检测strconv.ParseInt错误的方法

strconv.ParseInt执行失败时,通常会返回两种明确的错误类型,你可以用errors.Is直接匹配预定义的错误值来检测:

  • strconv.ErrSyntax:输入字符串不是合法的整数格式
  • strconv.ErrRange:输入数值超出了目标整数类型的取值范围

具体实现示例

package main

import (
	"errors"
	"fmt"
	"strconv"
)

func main() {
	// 示例1:格式错误的输入
	input1 := "xyz789"
	_, err := strconv.ParseInt(input1, 10, 64)
	if err != nil {
		if errors.Is(err, strconv.ErrSyntax) {
			fmt.Println("错误:输入不是有效的整数格式")
		} else if errors.Is(err, strconv.ErrRange) {
			fmt.Println("错误:输入数值超出目标类型范围")
		} else {
			fmt.Printf("未知错误:%v\n", err)
		}
	}

	// 示例2:超出范围的输入
	input2 := "9223372036854775808" // 比int64最大值大1
	_, err = strconv.ParseInt(input2, 10, 64)
	if err != nil {
		if errors.Is(err, strconv.ErrRange) {
			fmt.Println("错误:输入数值超出int64的取值范围")
		}
	}
}

原理说明

strconv.ParseInt返回的错误实际是*strconv.NumError类型,该类型包含一个Err字段,存储的就是strconv.ErrSyntax或strconv.ErrRange。errors.Is会递归遍历错误链,匹配底层的错误值,因此能准确识别错误类型。

如果需要获取更详细的错误上下文(比如具体的输入字符串、出错的操作),可以通过类型断言获取*strconv.NumError实例:

if err != nil {
	numErr, ok := err.(*strconv.NumError)
	if ok {
		fmt.Printf("操作:%s,输入值:%s,错误原因:%v\n", numErr.Func, numErr.Num, numErr.Err)
	}
}

内容的提问来源于stack exchange,提问作者Rajeshwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:01:02