go语言简易计算器核心是解析表达式并安全执行四则运算:用正则提取数字与操作符,strconv.ParseFloat转数值,switch处理运算,除零和非法输入均报错,支持小数、循环交互及空格/大小写预处理。

在 Go 语言中构建一个简单计算器,核心是解析用户输入的表达式并安全执行四则运算。不需要复杂框架,用标准库就能完成,重点在于输入处理、运算优先级和错误防护。
基础命令行交互:读取并拆分表达式
使用 fmt.Scanln 或 bufio.Scanner 获取一行输入,例如 “5 + 3” 或 “10 * 2 – 4”。建议按空格分割(适合初学),但要注意多位数和负数场景。更稳妥的做法是用正则提取数字与操作符:
- 用 regexp.MustCompile(`(-?d+.?d*)s*([+-*/])s*(-?d+.?d*)`) 匹配两个操作数加一个运算符
- 若需支持连续运算(如 3 + 5 * 2),需实现简易表达式解析器或调用第三方库如 robfig/eval(仅用于学习,生产环境慎用)
安全数值转换与运算逻辑
用 strconv.ParseFloat 转换字符串为 float64,捕获错误避免 panic:
封装成可复用函数
把核心逻辑抽成函数,便于测试和扩展:
立即学习“go语言免费学习笔记(深入)”;
func Calculate(a, b float64, op string) (float64, error) { switch op { case "+": return a + b, nil case "-": return a - b, nil case "*": return a * b, nil case "/": if b == 0 { return 0, errors.New("division by zero") } return a / b, nil default: return 0, fmt.Errorf("unsupported operator: %s", op) } }
主函数中调用该函数,并统一处理错误输出。
增强体验的小技巧
- 支持小数:用 float64 而非 int,输入 “3.14 * 2” 也能算
- 循环运行:用 for 循环包裹输入逻辑,输入 “quit” 退出
- 忽略大小写与空格:用 strings.TrimSpace 和 strings.ToLower 预处理