当前位置: 首页 > 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))
}

结果:

http://www.lryc.cn/news/423194.html

相关文章:

  • 使用C语言构建Lua库
  • 愤怒的江小白,这几年怎么了?
  • Unity教程(十)Tile Palette搭建平台关卡
  • 如何防止员工私自拷贝公司内部文件?安企神帮你解决泄密之忧
  • Linux应急响应检查工具
  • CP AUTOSAR标准之EEPROMAbstraction(AUTOSAR_SWS_EEPROMAbstraction)(更新中……)
  • 重启redis服务时报错:Failed to start redis.service: Unit not found
  • Hive3:识别内部表、外部表及相互转换
  • Android笔试面试题AI答之Kotlin(7)
  • 高辐照整车太阳辐照模拟系统试验舱
  • 如何制作优秀的年终总结PPT?
  • 架构师第六周作业
  • 解密Java中介者模式:代码实例带你深入理解
  • 19c做好这件事,大幅提升Data Pump工作效率
  • 6种常用的AR跟踪方法
  • HBO引爆血腥浪漫,尺度全开必看的影视剧推荐
  • 【kubernetes】pod控制器详解
  • Zookeeper学习、Tomcat
  • 软件测试基础知识与面试题最强总结(2024版)
  • ESP32播放网络音频文件
  • 端到端 AWS 定量分析:使用 AWS 和 AWSCLI 自动运行脚本
  • 数据结构与算法 - B树
  • Java二十三种设计模式-观察者模式(15/23)
  • opencv-python图像增强二:图像去雾(暗通道去雾)
  • 自研Vue3低代码海报制作平台第一步:基础拖拽组件开发
  • QT 的 QSettings 读写 INI 文件的示例
  • 【零基础学习CAPL语法】——testStep:测试结果输出函数
  • 8.5.数据库基础技术-规范化
  • 于博士Cadence视频教程学习笔记备忘
  • 8.3.数据库基础技术-关系代数