go mock server的简易实现示例
目录
- 前言
- 代码
- 步骤1
- 步骤2
- 步骤3
- 步骤4
- 最终效果
- 最后
前言
学习golang也一段时间了,看了一些书,上周又看了一本入门级的《Go语言趣学指南》,是时候检验成果了。
目的:通过读取本地mock数据,发起http请求,返回给前端,实现mock功能。
代码
整体代码只在50行左右,是一个极其简陋的mock server,没有多余的功能(主要是不会
步骤1
扫描本地以json结尾的文件,获取文件路径
// 获取当前json文件所在的路径已经文件名,然后进行拼接 func ParsePath() (path string, err error) { pwd, _ := os.Getwd() fileList, err := ioutil.ReadDir(pwd) if err != nil { log.Fatal(err) } var curJsonFile string for _, v := range fileList { name := v.Name() if isJson := strings.Contains(name, "json"); isJson { curJsonFile = name } } if curJsonFile == "" { return curJsonFile, errors.New("dont have json file") } absPath := pwd + "/" + curJsonFile return absPath, nil }
步骤2
// 根据传入的文件名读取具体的[]byte数据 func ReadJSON(path string) ([]byte, error) { jsonFile, err := os.Open(path) if err != nil { log.Fatal("open file err") } defer jsonFile.Close() byteValue, err := ioutil.ReadAll(jsonFile) if err != nil { return nil, err } return byteValue, nil }
步骤3
// 根据传入的[]byte数据,将数据转换反序列化为map类型 // 这里由于不知道json文件的具体数据,具体结构,所以用了map[string]interface{}的 // 数据类型 func DecodeJSONString(jsonBytes []byte) (map[string]interface{}, error) { var m map[string]interface{} err := json.Unmarshal(jsonBytes, &m) if err != nil { log.Fatal("json unmarshal fail", err) return nil, err } return m, nil }
步骤4
var data map[string]interface{} func returnResponse(w http.ResponseWriter, r *http.Request) { w.Header().Set("content-type", "application/json") path := r.URL.Path if d := data[path]; d != nil { stringData, err := json.Marshal(data[path]) if err != nil { log.Fatal(err) } w.Write(stringData) } } func main() { path, err := src.ParsePath() if err != nil { log.Fatal(err) } bytes, err := src.ReadJSON(path) if err != nil { log.Fatal(err) } m, err := src.DecodeJSONString(bytes) data = m if err != nil { log.Fatal("decode fail: ", err) } for addr, _ := range data { http.HandleFunc(addr, returnResponse) } err = http.ListenAndServe(":3000", nil) if err != nil { log.Fatal("listenAndServer fail") } }
最终效果
本地访问localhost:3000/v1/lottery
前端可以拿到返回的数据
mock的本地json文件
{ "/v1/lottery": [{ "name": "shinji", "age": 20 }, { "name": "ayanami", "age": 20 }] }
最后
这个是一个非常简易的mock server, 还不支持多文件格式,多个文件,多种请求方法,自定义规则mock数据等等。也只是对当前Golang学习后的一次小测验,很简单,更多关于go mock server实现的资料请关注我们其它相关文章!
赞 (0)