Q: golang 错误处理,我总觉得我写的很怪,不知道怎么改

2023-03-06 18:07:16 +08:00
 anonymous2351d00

Intro

如下代码

func Open() (*ent.Client, error) {
	dsn := fmt.Sprintf("%s:%s@tcp(%s)/ncepu", Option.Username, Option.Password, Option.Address)
	client, err := ent.Open("mysql", dsn)
	if err != nil {
		return nil, err
	}
	defer func(client *ent.Client) {
		err := client.Close()
		if err != nil {
			log.Fatal(err)
		}
	}(client)
	return client, nil
}
func ExistClientID(clientID string) (bool, error) {
	client, err := mysql.Open()
	if err != nil {
		return false, err
	}
	return client.Authorization.Query().Where(authorization.ClientID(clientID)).Exist(context.Background())
}

func PasswordAuthorizationHandler(ctx context.Context, clientID, username, password string) (userID string, err error) {
	exist, e := service.ExistClientID(clientID)
	if e != nil {
		err = e
		return
	}
	if !exist {
		err = errors.ErrInvalidClient
		return
	}
	uid, e := service.Authorization(ctx, username, password)
	if e != nil {
		err = e
		return
	}
	return uid, nil
}

qeustion

1251 次点击
所在节点    问与答
9 条回复
anonymous2351d00
2023-03-06 18:09:23 +08:00
看帖子格式时候又看了一遍代码,好多 nil 没有处理,我好难受
anonymous2351d00
2023-03-06 18:10:33 +08:00
大家看的时候就看个格式吧,别细究业务了,想知道这种 err 和 nil 怎么处理好看
rimutuyuan
2023-03-06 18:31:47 +08:00
Open 获取 Client 后还能使用吗,defer 里不是 Close 了,我都是在 ExistClientID 中 defer client.close ,错误一般不关心
webcape233
2023-03-06 18:32:42 +08:00
这个 err 不会外传,难道 ide 没报错?应该 return "" err , 前面那两个可以将 err 写在第一个=语句后用分号分隔
dobelee
2023-03-06 20:46:56 +08:00
打开的方法里怎么还关闭了?
none
2023-03-06 22:19:13 +08:00
Open 里打开的 client 在返回之前 close 了,外面根本用不了
lessMonologue
2023-03-07 00:11:15 +08:00
最内层只负责返回数据或者 error ,调用者自行处理错误(打印日志...)。
anonymous2351d00
2023-03-07 09:13:14 +08:00
@dobelee
@rimutuyuan

我应该再写一个函数叫 Destroy 在调用层关闭连接,然后再 处理完数据以后在处理数据的函数里关闭链接


@lessMonologue 好的大佬,我重构一下
anonymous2351d00
2023-03-07 09:40:45 +08:00
@webcape233 还没有试过,理解着是函数后面返回值也可以用?给他们赋值 return 中断函数外面就能收到值了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/921687

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX