前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go开发中这些头大的坑你踩了几个?

Go开发中这些头大的坑你踩了几个?

作者头像
小锟哥哥
发布2022-08-31 11:40:38
2400
发布2022-08-31 11:40:38
举报
文章被收录于专栏:GoLang全栈

写代码遇到坑,就像:

我们带着耳机听着歌,走在阳光正好的大道上,突然脚下一沉,一阵失重感,完了,我又掉坑了。

今天我们就一起来盘点下,那些年我们踩过的坑!

一、我哪里错了?Error信息不全

官方的 error 包,抛出错误后,只有一句错误信息,别的信息都没有。

当你看到一堆的错误日志,你一定会问自己,哪里错了。

我想告诉你,你没错,错的是 error 包,你把它换了,使用 github.com/pkg/errors 就好了呀。

来,上代码:

代码语言:javascript
复制
func MyError(a int) error {
 if a < 0 {
  return errors.New("参数不能小于0")
 }
 return nil
}

func main(){
 err := MyError(-4)
 fmt.Printf("%+v \n", err)
}

// 输出结果

参数不能小于0
main.MyError
        /Users/kun/Desktop/课件/design/ref/main.go:100
main.main
        /Users/kun/Desktop/课件/design/ref/main.go:92
runtime.main
        /usr/local/go/src/runtime/proc.go:255
runtime.goexit
        /usr/local/go/src/runtime/asm_amd64.s:1581

是不是挺像 panic 的错误异常哇,没错,没错,堆栈的外衣都出来了。

如果你正常打印这个 err 只会得到 err 的错误信息。

其原理是,这个包,他实现了Format方法:

这个方法他可以在 fmt 包,传入不同参数,输出不同结果。

没错 stack 就是错误的堆栈信息。

快去试试吧!

二、一连串的参数,头大

我不知道大家有没有遇到过,在调用某个库的方法时,参数 5 6 个的那种,有些还不是必填那种

这也是一个非常让人头大的现象,而且这种参数顺序往往是不能乱的

上代码:

代码语言:javascript
复制
func GetUserList(page, pageSize, userType, userStatic int, userFrom string)  {
 //page 分页
 //pageSize 每页取的数量 【非必传】
 //userType 用户类型 【非必传】
 //userStatic 用户状态 【非必传】
 //userFrom 用户来源 【非必传】

 //....具体逻辑省略
}

就问你看到怕不怕,某些参数还不是非必传。

我们使用时就得这样调用:

代码语言:javascript
复制
GetUserList(1,10, "","", "")

好了,我已经听到你想骂他的心理活动了。

面对如此情况,我们建议是使用 Option 方法去写!

一般参数超过一定数量,就建议使用 Option 这样的方式去处理:

代码语言:javascript
复制
type GetUserListOption struct {
 PageSize   int
 UserType   string
 UserStatic string
 UserFrom   string
}

func GetUserList(page int, option *GetUserListOption) {
 // 只保留了必要参数,其他参数收到option里面
 if option==nil {
  // 走默认
 }
}

这样只保留必要参数在外面,其他全给收到 Option 里面,是不是可读性和可扩展性一下就高了许多。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoLang全栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、我哪里错了?Error信息不全
  • 二、一连串的参数,头大
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档