如何在Golang中实现一个简单的计算器 Go语言命令行交互实战

1次阅读

fmt.scanln卡住因要求换行结束且不跳空格;应改用fmt.scan读单值,bufio.readringer读整行;解析前须检查切片长度、strconv错误及除零;go需编译后执行,非直接运行。

如何在Golang中实现一个简单的计算器 Go语言命令行交互实战

fmt.Scanln 读取用户输入时为什么总卡住或读错?

因为 fmt.Scanln 要求输入严格以换行结束,且不跳过前导空格,遇到空行或多余空格就直接返回 0 或报错;实际交互中用户随手敲个空格、回车,它就罢工了。

  • 改用 fmt.Scan 更鲁棒:它自动跳过空白符,直到读到第一个非空值,适合读单个数字或运算符
  • 读整数别直接扫字符串再转,用 fmt.Scan(&num) 配合 int 变量,避免类型转换出错
  • 如果要读带空格的整行(比如 “12 + 34”),得用 bufio.NewReader(os.Stdin).ReadString('n'),再手动切分

如何安全解析用户输入的算式,避免 panic: runtime Error: index out of range

用户随便输个 “5 +” 或 “+ +”,按空格切片后长度可能不足 3,直接取 parts[0]parts[1]parts[2] 必崩。

  • 先检查切片长度:if len(parts) != 3 就提示格式错误,不往下走
  • strconv.Atoi 转数字时必须检查 error,不能忽略返回值,否则非法输入(如 “abc”)会导致程序崩溃
  • 运算符只认 "+""-""*""/" 四种,其他一律拒掉,别用 switch 漏掉 default

除零错误和浮点精度问题在命令行计算器里怎么处理?

Go 的整数除法 / 遇到 0 直接 panic,而用户根本看不到——只会发现程序突然退出。另外,如果用 Float64 做所有运算,又容易让 “1 + 2” 输出成 “3.000000”。

  • 做除法前先判断 if secondNum == 0,提前返回错误提示,别等运行时崩
  • 保持整数优先:输入是整数,运算符是四则基础符号,结果也应是整数;只有明确需要小数(比如除不尽)才转 float,且输出用 fmt.printf("%.1f", result) 控制位数
  • 别用 math.IsNaNmath.IsInf 过度防御——命令行简单计算器没那么复杂,守住除零和非法输入就够了

为什么写完代码一运行就 “command not found” 或 “no such file or Directory”?

不是代码问题,是没编译或没加执行权限。Go 不是脚本语言,go run main.go 是临时编译运行,但很多人误以为能像 Python 那样直接 ./main.go

立即学习go语言免费学习笔记(深入)”;

  • 想当命令行工具用,必须 go build -o calc main.go 生成可执行文件,再 ./calc
  • 如果提示 permission denied,说明没执行权限:linux/macos 下补一句 chmod +x calc
  • windows 用户注意路径分隔符不用改,但别双击 exe——要进终端运行,否则窗口一闪就关

真正的麻烦不在语法,而在用户输入永远比你预设的多一个空格、少一个数字、或者干脆输了个 emoji。交互逻辑越简单,越得把边界检查写实。

text=ZqhQzanResources