用Golang开发在线计算器需前后端协作:前端HTML页面通过fetch发送表达式,后端Go程序用net/http处理POST请求,借助govaluate解析计算并返回JSON结果,主函数注册/calculate路由和静态文件服务,项目结构清晰,可快速搭建运行。

用Golang开发一个在线计算器项目并不复杂,关键在于合理组织前后端逻辑。核心思路是:前端提供用户界面输入表达式,后端使用Go处理HTTP请求并计算结果,再返回给前端展示。整个项目可以基于标准库快速搭建,无需引入复杂框架。
1. 项目结构设计
一个清晰的目录结构有助于后续维护:
calculator/
├── main.go # 主程序入口
├── handler/ # 存放处理函数
│ └── calc.go # 计算逻辑和路由处理
├── static/ # 静态文件(HTML、CSS、JS)
│ └── index.html # 前端页面
└── go.mod # 模块依赖管理
初始化模块:
go mod init calculator
2. 前端页面实现(HTML + JavaScript)
在 static/index.html 中创建简单界面:
立即学习“go语言免费学习笔记(深入)”;
包含一个输入框、按钮和结果显示区域。通过 fetch 发送表达式到后端 /calculate 接口。
function calculate() {
const expr = document.getElementById(“expr”).value;
fetch(“/calculate”, {
method: “POST”,
headers: { “Content-Type”: “application/json” },
body: JSON.stringify({ expression: expr })
})
.then(res => res.json())
.then(data => {
document.getElementById(“result”).innerText = data.result;
});
}
3. 后端路由与处理函数
在 handler/calc.go 中定义结构体和处理函数:
接收JSON格式的表达式,调用计算函数,返回结果或错误信息。
type CalcRequest struct {
Expression string `json:”expression”`
}
type CalcResponse struct {
Result string json:"result"
}
func CalculateHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != “POST” {
http.Error(w, “仅支持 POST 请求”, http.StatusMethodNotAllowed)
return
}
var req CalcRequest
err := json.NewDecoder(r.Body).Decode(&req)
if err != nil {
http.Error(w, “请求格式错误”, http.StatusBadRequest)
return
}
result, err := Evaluate(req.Expression)
if err != nil {
result = “错误: ” + err.Error()
}
response := CalcResponse{Result: result}
w.Header().Set(“Content-Type”, “application/json”)
json.NewEncoder(w).Encode(response)
}
4. 表达式求值逻辑
Go标准库没有内置表达式解析器,但可以用第三方库如 gorilla/mux 或自己实现简易解析。
推荐使用 shunting-yard 算法或现成库如 antonmedv/expr,但最简单方式是直接调用系统工具(仅限学习)。
更安全的做法是写一个简单的递归下降解析器,或使用 evanphx/json-patch/v5 的子包,但为简化,可用如下方法:
import “github.com/Knetic/govaluate”
func Evaluate(expr string) (string, error) {
expression, err := govaluate.NewEvaluableExpression(expr)
if err != nil {
return “”, err
}
result, err := expression.Evaluate(nil)
if err != nil {
return “”, err
}
return fmt.Sprintf(“%v”, result), nil
}
记得添加依赖:
go get github.com/Knetic/govaluate
5. 主程序启动服务
在 main.go 中注册路由和静态文件服务:
package main
import (
“net/http”
“calculator/handler”
)
func main() {
http.HandleFunc(“/calculate”, handler.CalculateHandler)
http.Handle(“/”, http.FileServer(http.Dir(“static/”)))
println(“服务器运行在 :8080”)
http.ListenAndServe(“:8080”, nil)
}
运行项目:
go run main.go,然后访问 http://localhost:8080
基本上就这些。功能可逐步扩展,比如增加历史记录、支持函数(sin、sqrt)、语法高亮等。关键是先跑通基础流程。
以上就是Golang如何开发在线计算器项目的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1414710.html
微信扫一扫
支付宝扫一扫