如何在Golang中拦截1-5范围外的用户输入并终止程序?
解决Go程序中输入范围不符合时终止程序的问题
核心解决方案
在Go中,要终止程序有两种常用方式,同时需要先修正原代码的错误处理顺序(原代码先判断范围再处理解析错误,会导致无效输入误触发范围提示):
方式1:使用os.Exit()终止程序(推荐)
os.Exit(n)可以直接终止程序,非0的退出码(比如1)能明确表示程序因异常终止,原代码已导入os包,直接调用即可。
修正后的完整代码:
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func main() { fmt.Println("请为我们的披萨评分(1-5分)") reader := bufio.NewReader(os.Stdin) // 先处理输入读取错误 input, err := reader.ReadString('\n') if err != nil { fmt.Println("读取输入失败:", err) os.Exit(1) } fmt.Println("你输入的评分是:", input) convertedInput, err := strconv.ParseFloat(strings.TrimSpace(input), 64) // 优先处理数字解析错误 if err != nil { fmt.Println("输入不是有效数字:", err) os.Exit(1) } // 范围判断,不符合则终止程序 if convertedInput > 5 || convertedInput < 1 { fmt.Println("请输入1到5之间的数字") os.Exit(1) // 此处终止程序 } // 符合条件的后续逻辑 fmt.Println("你的最终评分是:", convertedInput) }
方式2:使用return终止main函数
因为main函数无返回值,在main内调用return也会直接终止程序,但这种方式的退出码为0(表示正常终止),适合不需要区分异常场景的情况:
// 替换范围判断分支的代码 if convertedInput > 5 || convertedInput < 1 { fmt.Println("请输入1到5之间的数字") return // 终止main函数,程序结束 }
额外优化点
- 原代码未处理
reader.ReadString()的错误,补充后避免输入读取失败时程序继续执行; - 修正了原代码中
Yourr的拼写错误。
内容的提问来源于stack exchange,提问作者Hamed Yarandi
相关产品推荐
相关产品推荐

