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

题目要求:

题目

1.shape 接口有面积Area() float64和 周长Perimeter()fioat64 两个法。为`Circle` `Rectangle`实现`shape` 接口。

2.实现isGreater(shape1,shape2 shape)boo1 函数,用于比较两个形状的大小,并使用单元测试验证

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

请求示例:

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

代码

Go 复制代码
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
)

const pi = 3.14

type Shape interface {
	Area() float64
	Perimeter() float64
}

type Circle struct {
	Radius float64
}

type Rectangle struct {
	Height float64
	Width  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))
}

结果:

相关推荐
DsirNg4 小时前
一文讲清网络协议:从打开网页到理解 HTTP、HTTPS 与 TLS
http·https·dns·网络基础·入门教程·tls·web 安全
奈斯先生Vector4 小时前
2026 AIGC API 网关韧性评测:为什么 HTTP 200 不等于有效交付
网络协议·http·aigc
拾光Ծ5 小时前
【Linux网络】深入理解网络层:从IP协议格式,子网划分到NAT与路由机制
linux·网络·网络协议·tcp/ip·计算机网络
谏书稀5 小时前
C++/Python 混合编程(CPython)中 GIL饥饿 导致的 HTTP 服务无响应问题与解决方案
c++·python·http
全麦面包 time展天18 小时前
瀚海拾贝(一)HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
网络协议·http·asp.net
微硬创新18 小时前
耐达讯自动化16路0-20mA转PROFINET协议转换模块技术说明
人工智能·网络协议·自动化·信息与通信
2501_9159184121 小时前
iOS 怎么抓包?抓包鹰系统级 网卡 应用层三种方式对比,不越狱抓 iPhone 流量
网络协议·计算机网络·网络安全·ios·adb·https·udp
March.s1 天前
IP 存储核心 iSCSI:原理拆解 + 无报错实战指南
网络·网络协议·tcp/ip
godwaskillde1 天前
Java 11 HttpClient如何配置HTTP代理?连接测试与异常处理示例
java·开发语言·http
2501_915921431 天前
抓包鹰抓取系统 App 的流量,从底层读明文
网络协议·计算机网络·网络安全·adb·https·udp