如下代码
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
}
1
anonymous2351d00 OP 看帖子格式时候又看了一遍代码,好多 nil 没有处理,我好难受
|
2
anonymous2351d00 OP 大家看的时候就看个格式吧,别细究业务了,想知道这种 err 和 nil 怎么处理好看
|
3
rimutuyuan 2023-03-06 18:31:47 +08:00
Open 获取 Client 后还能使用吗,defer 里不是 Close 了,我都是在 ExistClientID 中 defer client.close ,错误一般不关心
|
4
webcape233 2023-03-06 18:32:42 +08:00 via iPhone
这个 err 不会外传,难道 ide 没报错?应该 return "" err , 前面那两个可以将 err 写在第一个=语句后用分号分隔
|
5
dobelee 2023-03-06 20:46:56 +08:00 via iPhone
打开的方法里怎么还关闭了?
|
6
none 2023-03-06 22:19:13 +08:00
Open 里打开的 client 在返回之前 close 了,外面根本用不了
|
7
lessMonologue 2023-03-07 00:11:15 +08:00
最内层只负责返回数据或者 error ,调用者自行处理错误(打印日志...)。
|
8
anonymous2351d00 OP |
9
anonymous2351d00 OP @webcape233 还没有试过,理解着是函数后面返回值也可以用?给他们赋值 return 中断函数外面就能收到值了?
|