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! 👋")
}
相关推荐
handler0116 分钟前
Git 核心指令速查
linux·c语言·c++·笔记·git·学习
噜噜噜阿鲁~18 分钟前
python学习笔记 | 8.3、函数式编程-匿名函数
笔记·python·学习
星幻元宇VR19 分钟前
VR单人地震体验平台助力防灾减灾教育
科技·学习·安全·vr·虚拟现实
minstbe20 分钟前
【AI本体论研究学习】本体的核心元素:类、属性、实例与关系——拆解 OWL/RDF 四大基石
人工智能·学习
YJlio22 分钟前
Windows Internals 读书笔记 10.3.3:Task Scheduler 架构详解
人工智能·windows·笔记·python·学习·chatgpt·架构
hopetomorrow23 分钟前
学习路之PHP --PHP 常用扩展及作用表
开发语言·学习·php
止语Lab26 分钟前
Gin 很好,但你的项目可能需要更多
golang·gin
嵌入式小企鹅30 分钟前
嵌入式面试宝典
学习·面试·嵌入式·嵌入式工程师·高薪offer
卖芒果的潇洒农民30 分钟前
NVMe 2.3协议学习
学习
小糖学代码1 小时前
LLM系列:2.pytorch入门:9.神经网络的学习
人工智能·python·深度学习·神经网络·学习·机器学习