V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  maotao456  ›  全部回复第 1 页 / 共 4 页
回复总数  70
1  2  3  4  
19 天前
回复了 OwO233 创建的主题 程序员 请问为什么 if 和 else 要匹配呀?
我现在写代码,在非必要情况下不用 else.

假设代码是这样

穿运动鞋
if 下雨 == true {
穿雨鞋
}

出门
那些说 wd 吃资源高的,我是没看出来高在哪里了
@yggd 为什么你的可以更新到 12.06 ?
142 天前
回复了 csulyb 创建的主题 PHP PHPer 现在写后台业务 实现高并发只有 swoole 吗
求求你,换个语言吧
@blinue 我之前用 i7 低压 U 的时候也这样,现在换了 i9 标压 U ,快得飞起。
我几乎不用网页套壳的产品,除非迫不得已。
@pkoukk
你要是用户,你上来看到报个错血压高,还是看上去自己的数据全没了血压高?

----------------------------------------------------
这个你说得有些道理,我想想
@maotao456 并且,if err != nil 的判断并不能替代业务上的 if struct != nil or if len(slice) > 0 , 因为即使没有 error 发生。 我从来不会以 error 有没有来判断数据正不正确。 而是以数据本身判断数据是否正确。

伪代码如下:

var entity user
err := sqlx.Get("select * from xx limit 1;", &user)
if err != nil {
logger.Error("xxxxxxxxxxxxxxxxxxxxx");
return err
}

if user.ID == 0 {
return errors.New("user not found")
}

在这段代码中,重点只在与有没有写日志。 有没有 if err 都不影响业务逻辑的流程。

那么, 换个角度来说,是否所有数据库操作都可以统一写日志呢,业务中的 query 操作是否可以不显示处理 error 呢, 单看这个例子似乎是可以的。

slice 查询操作场景你们也可以代入看看。
我补充一下:为什么我提出 query 类操作不处理 err ,我的考虑是这样的,
查询结果无非两种,是 struct 或者是 slice

一般来说,无论是什么查询结果,我们都会且有必要验证结果的有效性(而不仅仅是 err )。
比如说:
1. 如果查询结果是一个 struct ,那么至少会 if xx != nil
2. 如果查询结果是一个 slice ,一般至少会判断 len(slice) > 0

在这两个前提下,无论有没有 err 都会去做的处理。 ( for 类操作甚至不需要不需要提前 len(slice))
重点: 一旦发生 error, 那么这两种查询的结果一定是 nil 和 len(slice) = 0, 所以对于预期来说并没有任何差异。
@lsk569937453 这个提到了一个我没考虑到的场景,确实存在这个问题。 不是单纯的查询不到的问题。我再犹豫一下。谢谢
@pkoukk 你们都不看完内容吗,我说 insert 和 update 的处理 error ,这就覆盖了链式操作。
@xausky 我有提到, 将数据库操作封装一层,统一记录 error 。
@sadfQED2 你是怎么目测出没用事务的? 我是说 query 类操作不处理 err ,insert, update 要处理 err 。 业务系统都是 query 多过 insert 和 update 。
207 天前
回复了 SZhan 创建的主题 Java 如何从一段自然语言中识别地址信息?
巧了,我也做了一个类似需求。 从小票里面提取出店铺名称、商品、金额、收件人等信息

一开始的思路是,OCR -> 正则匹配 可是后来发现每家店的小票格式都不同,难以预料未来还有什么格式。 代码没法写。
然后,刚好文心一言 Api 可以用了。 那就 OCR -> 文心一言。
搞定下班
215 天前
回复了 robotdiy 创建的主题 程序员 独立开发者是怎么做 UI 设计的?
我有一种感觉是,天不生 v0 ,独立开发者写前端万古如长夜。
@iyear 多谢
239 天前
回复了 MegatronKing 创建的主题 程序员 新一代国产 API 抓包调试工具 Reqable
我说一下问题吧,关闭软件后没有自动取消系统代理状态,然后上不了网。
254 天前
回复了 thisisgpy 创建的主题 程序员 golang sqlx 的事务封装
@maotao456 再附一段使用代码给你


// executeUserRegistrationTransaction 执行用户注册的事务
func (a *LoginService) executeUserRegistrationTransaction(ctx context.Context, wxPlainData *keyWechatUserInfo, wechatAppName string) error {

// 生成新用户的 memberCode
memberCode := wxPlainData.PhoneNumber

// 生成新用户需要的几个关联数据
wxUser, wxUserLink, memberEntity := a.prepareNewUserRelatedEntities(
memberCode,
wxPlainData,
wechat.GetAppIDByInstanceName(wechatAppName),
)

return transaction.Run(ctx, func(tx database.DB) error {
var err error
// 插入新用户
if _, err = exec.CreateForNamed(ctx, memberEntity, tx); err != nil {
return fmt.Errorf("create member failed. reason: %w", err)
}

// 插入新用户的微信信息
if _, err = exec.CreateForNamed(ctx, wxUser, tx); err != nil {
return fmt.Errorf("create wx user failed. reason: %w", err)
}

// 插入新用户的微信关联信息
if _, err = exec.CreateForNamed(ctx, wxUserLink, tx); err != nil {
return fmt.Errorf("create wx user link failed. reason: %w", err)
}
return nil
})
}
254 天前
回复了 thisisgpy 创建的主题 程序员 golang sqlx 的事务封装
270 天前
回复了 yaott2020 创建的主题 程序员 感觉 rust 门槛太高了
@Jirajine async 的问题是啥? 初学者好奇。
1  2  3  4  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2784 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 38ms · UTC 14:44 · PVG 22:44 · LAX 07:44 · JFK 10:44
Developed with CodeLauncher
♥ Do have faith in what you're doing.