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! 👋")
}
相关推荐
似水明俊德32 分钟前
02-C#.Net-反射-学习笔记
开发语言·笔记·学习·c#·.net
adore.9681 小时前
3.18 复试学习
学习
留白_1 小时前
MySQL学习(9)——索引
学习
请你喝好果汁6412 小时前
生信学习笔记:ArchR 处理小麦单细胞 ATAC-seq 中的细胞数差异与 Embedding 报错调试
学习
jinanwuhuaguo2 小时前
OpenClaw、飞书、Claude Code、Codex:四维AI生态体系的深度解构与颗粒化对比分析
大数据·人工智能·学习·飞书·openclaw
萨文 摩尔杰3 小时前
GPS原理学习
学习·fpga开发
长安11083 小时前
web后端----HTTP协议与浏览器F12
前端·网络协议·http
fengci.3 小时前
ctfshow(web入门)295-300
java·开发语言·学习
renhongxia15 小时前
多模态融合驱动下的具身学习机制研究
运维·学习·机器人·自动化·知识图谱
Java成神之路-5 小时前
HTTP 协议进化史:从 1.0 到 3.0
网络·网络协议·http