error排查小技能

TonoT · · 380 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

在日常的问题排查中经常因为找不到问题的所在方法,需要浪费大量的时间,当然链路追踪这个另说,记录一下我个人的问题排查方法,下面这个是正常的输出: ```go func main() { _, err := GetUrl("baidu.com") fmt.Println(err.Error()) } func GetUrl(url string) (string, error) { resp, err := http.Get(url) if err != nil { return "", err } all, _ := ioutil.ReadAll(resp.Body) defer resp.Body.Close() return string(all), nil } //Get "baidu.com": unsupported protocol scheme "" ``` 当然这个只是事例,很容易就可以找到问题,如果项目比较大,如何排查 ```go func main() { _, err := GetUrl("baidu.com") fmt.Println(err.Error()) } func GetUrl(url string) (string, error) { resp, err := http.Get(url) if err != nil { return "", WithTrack(err) } all, _ := ioutil.ReadAll(resp.Body) defer resp.Body.Close() return string(all), nil } func WithTrack(err error) error { caller, file, line, _ := runtime.Caller(1)//1是表明被调用的上一步,返回函数、文件名、行数 pc := runtime.FuncForPC(caller) index := strings.LastIndex(pc.Name(), ".") return errors.New(file + ":" + strconv.Itoa(line) + " " + pc.Name()[index+1:] + ", error:" + err.Error()) } ///Users/go/src/rest/internal/test/test.go:21 GetUrl, error:Get "baidu.com": unsupported protocol scheme "" ``` 这样就很容易找到事故地了

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

380 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传