GO学习记录——动态创建测试http接口

写前端程序时总是要等后台接口写完再联调,就思考了下能不能用热更新的套路,写一个可以动态创建http接口的后台程序。

不知道这算不算前端写后台的邪修方法。

1.在go工程根目录下创建files文件夹,里边存放接口需要返回的数据json串,保存为.json文件。

2.之后添加的每一个接口,保证url地址最后一个/后的内容和files文件夹下的json文件同名。

3.打开浏览器,在地址栏输入内容:

http://localhost:8080/api/app/testapi?arg=1

http://localhost:8080/api/app/testapi

http://localhost:8080/testapi?arg=1

这几种哪个都可以成功返回files/testapi.json文件内容,这样适配是为了保证前端的测试代码可以和生产代码保持一致。

我用前端写了测试代码,使用Get/Post方法都可以成功返回信息,没有URL参数解析功能,因为文件名不让使用?&等特殊符号。

4.以下为go代码,文件存放目录等可以根据需要自行提取配置。

go 复制代码
// 配置存放可下载文件路径,如果传参中不包含扩展名,自动添加.json后缀
func SettingDownloadFilePath() {
	// 处理所有请求
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		// 获取请求路径
		path := r.URL.Path
		LogInfo("=================url路径=" + path)
		// 如果是根路径,显示欢迎信息或返回404
		if path == "/" {
			helloHandler(w, r)
			return
		}

		// 获取路径中最后一个斜杠后的字符串(文件名)
		fileName := filepath.Base(path)
		LogInfo("%s", "========fileName="+fileName)
		// 如果文件名中没有扩展名,自动添加 .json 后缀
		downloadFileName := fileName
		if !strings.Contains(fileName, ".") {
			downloadFileName = fileName + ".json"
		}

		// 构建实际文件路径:files目录下的对应文件
		actualFilePath := "./files/" + downloadFileName

		// 检查文件是否存在
		if _, err := os.Stat(actualFilePath); os.IsNotExist(err) {
			http.Error(w, "File not found: "+fileName, http.StatusNotFound)
			return
		}

		// 设置响应头,强制浏览器下载文件
		w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", downloadFileName))
		w.Header().Set("Content-Type", "application/octet-stream")

		// 提供文件
		http.ServeFile(w, r, actualFilePath)
	})
}

// @Summary      根目录测试连接
// @Description
// @Tags         tags1
// @Accept       json
// @Produce      json
// @Router       / [get]
func helloHandler(w http.ResponseWriter, r *http.Request) {
	LogInfo("访问路径:%s,来源:%s\n", r.URL.Path, r.RemoteAddr)
	// 编码 JSON 响应
	SendJSONResponse(w, true, http.StatusOK, "成功", "访问了根目录 Hello, World! 👋")
}
相关推荐
代码山河4 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
明天也要努力学习5 小时前
HTTP 协议的基本格式和 fiddler 的用法
网络协议·http·fiddler
紧跟先前的步伐5 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
释厄6235 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
日日大王学编程6 小时前
#Feed 流项目复盘:Redis 时间线缓存与 Outbox 消息可靠性设计
golang·1024程序员节
cpolar技术支持9 小时前
网关加 gzip,同时开启 chunked,下载回来的包解不开:把两层编码的解压顺序与长度核对做成只读页
python·http·网络编程·socket·内网穿透
小嘉丶学长9 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
小李不想当小白10 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
北冥you鱼13 小时前
Go 语言 CRUD 实战:从接口设计到真实业务场景
开发语言·后端·golang
adinnet202613 小时前
电商客服对话知识库的自学习闭环与质量演进机制
学习