当前位置: 首页 > news >正文

Golang实现简单的HTTP服务,响应RESTful请求判断形状大小

题目要求:

题目
1.shape 接口有面积Area() float64和 周长Perimeter()fioat64 两个法。为`Circle` `Rectangle`实现`shape` 接口。
2.实现isGreater(shape1,shape2 shape)boo1 函数,用于比较两个形状的大小,并使用单元测试验证

3.实现http.Handler,作为HTTP服务比较Circle与 Rectangle 的大小。并使用香户端验证

请求示例:

curl --request POST \
--url http://localhost:8080/shape/isGreater \
--header 'content-type: application/json' \
--data '{"Shape1": {"Radius": 3}, "Shape2": {"Width": 2, "Height": 3}}'


代码

package mainimport ("encoding/json""fmt""log""net/http"
)const pi = 3.14type Shape interface {Area() float64Perimeter() float64
}type Circle struct {Radius float64
}type Rectangle struct {Height float64Width  float64
}func (c Circle) Area() float64 {return pi * c.Radius * c.Radius
}func (c Circle) Perimeter() float64 {return 2 * pi * c.Radius
}func (r Rectangle) Area() float64 {return r.Height * r.Width
}func (r Rectangle) Perimeter() float64 {return 2 * (r.Height + r.Width)
}func isGreater(s1, s2 Shape) bool {if s1.Area() > s2.Area() {fmt.Println("C1:%v is greater than C2:%v", s1, s2)return true}fmt.Println("C1:%v is less than C2:%v", s1, s2)return false
}type RequestData struct {Shape1 Circle    `json:"Shape1"`Shape2 Rectangle `json:"Shape2"`
}// CompareHandler 处理比较两个形状面积的HTTP请求
func CompareHandler(w http.ResponseWriter, r *http.Request) {var data RequestData// 从请求体中解码JSON数据到RequestData结构体中err := json.NewDecoder(r.Body).Decode(&data)if err != nil {// 如果解码失败,返回400 Bad Request错误http.Error(w, err.Error(), http.StatusBadRequest)return}// 比较两个形状的面积if isGreater(data.Shape1, data.Shape2) {// 如果圆形面积较大,返回 "Circle is larger"fmt.Fprintf(w, "Circle is larger")} else {// 否则,返回 "Rectangle is larger"fmt.Fprintf(w, "Rectangle is larger")}
}func main() {http.HandleFunc("/shape/isGreater", CompareHandler)log.Fatal(http.ListenAndServe(":8080", nil))
}

结果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 理解张量拼接(torch.cat)
  • cmseasy的两个注入漏洞
  • GiantPandaCV | 大模型训练:Megatron-Kwai中的内存优化
  • Lesson 57 An unusual day
  • git:安装 / 设置环境变量 / 使用
  • 009集——调用方法与递归算法 ——C#学习笔记
  • 网络安全面试题
  • 飞桨Paddle API index_add 详解
  • 8月8号前端日报:web在线进行eps32固件升级
  • 阿里云部署open-webui实现openai代理服务(持续更新)
  • Flink Checkpoint expired before completing解决方法
  • R 语言学习教程,从入门到精通,R 数据框(14)
  • 使用html+css+js实现完整的登录注册页面
  • Python酷库之旅-第三方库Pandas(082)
  • 数据集的简单制作和使用
  • 【347天】每日项目总结系列085(2018.01.18)
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • AngularJS指令开发(1)——参数详解
  • conda常用的命令
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • echarts花样作死的坑
  • HTML-表单
  • Java教程_软件开发基础
  • Laravel核心解读--Facades
  • php ci框架整合银盛支付
  • React Transition Group -- Transition 组件
  • React的组件模式
  • Vue2.0 实现互斥
  • vue-router的history模式发布配置
  • Xmanager 远程桌面 CentOS 7
  • 前嗅ForeSpider采集配置界面介绍
  • UI设计初学者应该如何入门?
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (八)Flink Join 连接
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (含笔试题)深度解析数据在内存中的存储
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (一)UDP基本编程步骤
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)创业的注意事项
  • (转)母版页和相对路径
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .Net 4.0并行库实用性演练
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net Winform开发笔记(一)
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .NET8使用VS2022打包Docker镜像
  • .NET构架之我见
  • .NET设计模式(2):单件模式(Singleton Pattern)