当前位置: 首页 > news >正文

五星花园网站建设兼职海口网站制作企业

五星花园网站建设兼职,海口网站制作企业,网站建站 seo,网站页面设计价格介绍不同语言的错误处理机制: Error handling patterns[1] Musings about error handling mechanisms in programming languages[2] 项目中 main调func1#xff0c;func1调取func2... 这样就会出现很多的 if err ! nil { log.Printf()} , 在Kibana上查看时会搜到多条日志, 需要… 介绍不同语言的错误处理机制: Error handling patterns[1] Musings about error handling mechanisms in programming languages[2] 项目中 main调func1func1调取func2... 这样就会出现很多的 if err ! nil { log.Printf()} , 在Kibana上查看时会搜到多条日志, 需要逐级定位, 确定错误抛出的点 希望只有一条, 能清晰看到整个堆栈调用信息 使用log.xxxx方法: package mainimport ( fmt log strconv time)func init() { log.SetFlags(log.Lshortfile | log.LstdFlags)}func main() { str : 123a rs, err : func1(str) if err ! nil {  log.Printf(err is (%v)\n, err)  return } fmt.Println(最终结果为:, rs)}func func1(str string) (int, error) { b, err : func2() if err ! nil {  log.Printf(There is func11111,  func2 err(%v)\n, err) } if b  false {  strInt, err : strconv.Atoi(str)  if err ! nil {   log.Printf(There is func11111, err(%v)\n, err)  }  return strInt, err } return 0, nil}func func2() (bool, error) { now : time.Now().Unix() endTimeStr : 2021-08-06 20:00:0000 endtime, err : time.ParseInLocation(2006-01-02 15:04:05, endTimeStr, time.Local) if err ! nil {  log.Printf(There is func22222, err(%v)\n, err)  return false, err } if endtime.Unix()  now {  return true, nil } return false, nil} 执行结果: 2021/06/07 21:52:56 vs.go:56: There is func22222, err(parsing time 2021-08-06 20:00:0000: extra text: 00)2021/06/07 21:52:56 vs.go:33: There is func11111,  func2 err(parsing time 2021-08-06 20:00:0000: extra text: 00)2021/06/07 21:52:56 vs.go:40: There is func11111, err(strconv.Atoi: parsing 123a: invalid syntax)2021/06/07 21:52:56 vs.go:20: err is (strconv.Atoi: parsing 123a: invalid syntax) 使用errors.Wrapf方法: package mainimport ( fmt github.com/pkg/errors strconv time)func main() { str : 123a rs, err : func1(str) if err ! nil {  fmt.Printf(err: %v\n, err)  //fmt.Println(err:, lastErr) //必须%v才会打印完整堆栈信息,否则只打印错误信息  return } fmt.Println(最终结果为:, rs)}func func1(str string) (int, error) { b, err : func2() if err ! nil {  err  errors.Wrapf(err, There is func11111, func2 err, b is(%b) \n, b) } if b  false {  var strInt int  strInt, err  strconv.Atoi(str)  if err ! nil {   err  errors.Wrapf(err, There is func11111,str is(%s)\n, str)  }  return strInt, err } return 0, nil}func func2() (bool, error) { now : time.Now().Unix() endTimeStr : 2021-08-06 20:00:0000 endtime, err : time.ParseInLocation(2006-01-02 15:04:05, endTimeStr, time.Local) if err ! nil {  err  errors.Wrapf(err, There is func22222,endTimeStr is(%s)\n, endTimeStr)  return false, err } if endtime.Unix()  now {  return true, nil } return false, nil} 执行: err: strconv.Atoi: parsing 123a: invalid syntaxThere is func11111,str is(123a)main.func1        /Users/fliter/go/src/shuang/llog/1.go:39main.main        /Users/fliter/go/src/shuang/llog/1.go:13runtime.main        /usr/local/Cellar/go/1.16.3/libexec/src/runtime/proc.go:225runtime.goexit        /usr/local/Cellar/go/1.16.3/libexec/src/runtime/asm_amd64.s:1371 注意赋值这步, 必不可少 有一个问题, 即对于f1调f2,f2调f3这种, 如果f3发生error, 可以逐级将error抛出. 但如果一个方法里有两个error, 则第二条会覆盖掉第一条,如上 err errors.Wrapf(err, There is func11111, func2 err, b is(%b) \n, b)这一条就被覆盖了 // Wrapf returns an error annotating err with a stack trace// at the point Wrapf is called, and the format specifier.// If err is nil, Wrapf returns nil.func Wrapf(err error, format string, args ...interface{}) error { if err  nil {  return nil } err  withMessage{  cause: err,  msg:   fmt.Sprintf(format, args...), } return withStack{  err,  callers(), }} func callers() *stack { const depth  32 var pcs [depth]uintptr n : runtime.Callers(3, pcs[:]) var st stack  pcs[0:n] return st} // Callers fills the slice pc with the return program counters of function invocations// on the calling goroutines stack. The argument skip is the number of stack frames// to skip before recording in pc, with 0 identifying the frame for Callers itself and// 1 identifying the caller of Callers.// It returns the number of entries written to pc.//// To translate these PCs into symbolic information such as function// names and line numbers, use CallersFrames. CallersFrames accounts// for inlined functions and adjusts the return program counters into// call program counters. Iterating over the returned slice of PCs// directly is discouraged, as is using FuncForPC on any of the// returned PCs, since these cannot account for inlining or return// program counter adjustment.func Callers(skip int, pc []uintptr) int { // runtime.callers uses pc.arraynil as a signal // to print a stack trace. Pick off 0-length pc here // so that we dont let a nil pc slice get to it. if len(pc)  0 {  return 0 } return callers(skip, pc)} func callers(skip int, pcbuf []uintptr) int { sp : getcallersp() pc : getcallerpc() gp : getg() var n int systemstack(func() {  n  gentraceback(pc, sp, 0, gp, skip, pcbuf[0], len(pcbuf), nil, nil, 0) }) return n} 参考: golang 打印error的堆栈信息[3] Go错误处理最佳实践[4] 参考资料 [1] Error handling patterns: https://andreabergia.com/blog/2023/05/error-handling-patterns/ [2] Musings about error handling mechanisms in programming languages: https://www.amazingcto.com/best-way-to-handle-errors-for-a-programming-language/ [3] golang 打印error的堆栈信息: https://blog.csdn.net/fwhezfwhez/article/details/82854986 [4] Go错误处理最佳实践: https://lailin.xyz/post/go-training-03.html 本文由 mdnice 多平台发布
http://www.hkea.cn/news/14357940/

相关文章:

  • 免费的黄冈网站有哪些建筑设计方案
  • 百度做的网站国外可以打开吗中国建筑工程有限公司
  • 京东的网站规划与建设网站建设 骏域网络建设专家广州
  • 燕郊的大型网站建设制作一款app软件大概需要多少费用
  • 做个网站做什么呢wordpress 文章加图片
  • 广州电子商务网站建设费用惠州公司网站建设价格
  • 培训网站设计师东莞网站建设 织梦
  • 中牟高端网站建设天猫网页版
  • wordpress图片间隔东莞seo 公司
  • 灯罩技术支持东莞网站建设个人网站程序下载
  • 烟台网站排名优化公司哪家好wordpress 总数 函数
  • 名师工作室网站建设建议宁阳网页设计
  • 西安北郊网站维护运营好设计购物网站
  • 移动端网站建设的方案建官网公司
  • 成都哪家做网站公司好黄页88网站
  • 腾讯云免费网站建设2018网站建设合同范本
  • 舟山市定海区建设规划局网站商业空间
  • 点对点视频网站开发房地产开发资质
  • 网站开发教程 视频 ssh数据库和网站开发
  • 500云空间网站无锡谷歌推广
  • 做网站接活犯法吗介绍一个电影的网站模板下载
  • 常熟网站制作设计wordpress美化登录
  • c语言做网站吗黄石本土做网站的公司
  • 网站排版的优点中信国际建设公司网站
  • 为什么建设长虹网站建设一个视频教学网站
  • wordpress能做多大的站wordpress 查看密码
  • 网站源码调试做网站多少流量可以做广告
  • 苏州网站推广软件那些网站可以做团购
  • 公司网站建设内容建议搜狗推广管家
  • 失信人被执行人查询沈阳seo优化排名公司