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! 👋")
}
相关推荐
了一梨2 小时前
SQLite3学习笔记2:SQL 基础语法
笔记·学习·sqlite
小二·2 小时前
Go 语言系统编程与云原生开发实战(第2篇):并发编程深度实战 —— Goroutine、Channel 与 Context 构建高并发 API 网关
开发语言·云原生·golang
Remember_9932 小时前
网络编程套接字深度解析:从理论到实践的完整指南
网络·算法·http·https·udp·哈希算法·p2p
子夜江寒2 小时前
OpenCV 学习:文档扫描与视频运动检测与跟踪
opencv·学习·计算机视觉·音视频
爱喝可乐的老王2 小时前
神经网络的学习
人工智能·神经网络·学习
阿蒙Amon2 小时前
TypeScript学习-第2章:基础类型
javascript·学习·typescript
努力努力再努力wz2 小时前
【Linux网络系列】:打破 HTTP 明文诅咒,在Linux 下用 C++ 手搓 HTTPS 服务器全过程!(附实现源码)
linux·服务器·网络·数据结构·c++·http·https
charlie1145141912 小时前
现代嵌入式 C++——自定义删除器(Custom Deleter)
开发语言·c++·笔记·学习·嵌入式
闲谈共视2 小时前
Go语言与区块链技术的渊源
开发语言·golang·区块链