本篇内容主要讲解“go mock server如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go mock server如何实现”吧!
整体代码只在50行左右,是一个极其简陋的mock server,没有多余的功能
扫描本地以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
}
// 根据传入的文件名读取具体的[]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
}
// 根据传入的[]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
}
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
}]
}
到此,相信大家对“go mock server如何实现”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。