V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  henix  ›  全部回复第 1 页 / 共 5 页
回复总数  83
1  2  3  4  5  
我用了 Go 的错误处理后有个感受:调用栈真不是必需的
说起调用栈我就想起网传的这张图: https://www.cnblogs.com/jhj117/p/5627224.html
那么多调用栈全是中间层的,对排查错误也没啥帮助

但题目中的这种情况属于信息过少,也无法很好排错
那怎么办
我认为很多时候我们需要的不是调用栈,而是错误的上下文
比如读写文件错误的时候的文件名、请求上游 API 错误的时候的 url
而这些都不是简单的一个调用栈能自动解决的,都需要程序员在错误发生的附近手动添加
在错误向上传递的过程中,如果哪层有很重要的上下文,就在那一层把相关信息加到 err 里

Error: unexpected '>' at the beginning of value 这种错误,应该把参数名和值都输出出来,并且当 err 传递到 controller 层的时候,附加上请求信息
我的话这种情况不会使用 panic / recover ,那个是给意料之外的严重异常用的
这种确实需要一路 return nil, err
如果需要中间处理,那在最开始创建 err 的时候选择一个特定类型,中间件用 errors.Is 判断
以上是如果你用网上的常用框架的话就这么做

我个人认为这些框架的错误处理设计得不好,我开发自己的 web 项目的时候不用任何框架,只用 go 标准库
我设计的 controller 会返回:(结果, err1, err2)
其中 err1 代表用户输入错误,比如参数检查错误,要给用户返回 4xx
err2 代表服务器内部错误,要给用户返回 5xx
用这种方法,不需要 errors.Is 判断类型,只需要判断 err2 != nil 即可
可以多从特性的角度比较不同语言,把语言拆分成特性,掌握一种语言之后,再掌握有相同特性的语言就容易了
比如同样是迭代,有些语言是 for 循环,有些是 iterator ,还有些是 generator
比如 js 数组的 filter map ,Python 里有一样的东西
再比如一些多线程数据结构,如果你掌握了 Java 的多线程,在 Python 里也可以用类似的方式思考:
https://stackoverflow.com/questions/10236947/does-python-have-a-similar-control-mechanism-to-javas-countdownlatch
用 shellcheck 静态检查一下
程序员属于高收入群体,说出去容易遭大伙嫉妒,但如果说秃头,那大伙就哈哈大笑了
41 天前
回复了 jqknono 创建的主题 程序员 A 股有交易 API 吗
这种不可能完全开放的,联系券商,申请开通 QMT
42 天前
回复了 henix 创建的主题 FFmpeg ffmpeg 处理后视频时长问题
今天研究了一下,确实是最后一步的 concat 用的片段是 trim 之后没加 setpts ,之前有个回复提醒了我。

最后一步修正之后的 filter_complex:

```
"[fv]split[fv1][fv2]",
"[fv1]trim=0:7[fv1t]",
"[fv2]trim=7,setpts=PTS-STARTPTS[fv2t]",
"[fa]asplit[fa1][fa2]",
"[fa1]atrim=0:7[fa1t]",
"[fa2]atrim=7,asetpts=PTS-STARTPTS[fa2t]",
"[fv1t][fa1t][10:v][10:a][fv2t][fa2t]concat=3:1:1",
```

现在已经正常了,感谢各位的讨论
43 天前
回复了 henix 创建的主题 FFmpeg ffmpeg 处理后视频时长问题
感谢各位回复!
我刚才发现在完全不使用原始的 加载.mp4 的情况下依然会出现这个问题,可能是我的思考方向错了,今天被这个问题心态搞得有点绷不住。。。
目前初步怀疑是最后一步 concat 之前会把一个大视频拆分成前后两段,后面那段 trim 之后没加 setpts 导致的(因为前面一段正好是 7s ,让我误以为是原始视频的 7s )
有后续进展再更新
43 天前
回复了 henix 创建的主题 FFmpeg ffmpeg 处理后视频时长问题
@msg7086 初学视频编辑,还不知道你说的这些名词啥意思...但最后 concat 那一步我对齐了分辨率都是 1920x1080 ,帧率都是 60 fps ,还有啥需要注意的吗
43 天前
回复了 henix 创建的主题 FFmpeg ffmpeg 处理后视频时长问题
@lovelylain ffprobe -loglevel trace "加载.mp4" 贴到这里了: https://gist.github.com/henix/0ae8a97aeb78fc60206e4b75464fcfbd
这个原始视频是别人给我的,估计应该是用 Adobe 的软件做出来的
参考微信读书、豆瓣阅读的那种黄色背景
sqlc
81 天前
回复了 145431 创建的主题 RSS 纯小白发问 rss,不怕喷!
似乎你把 RSS 理解为内容农场站一类的东西了。如果是像内容农场一样只是抓取别人的东西来当做自己的内容,那确实可以说是盗版。

但你可以去了解一下原始的 RSS 阅读器(推荐这篇文章 https://sspai.com/post/56391 )而不是最近的 Follow 。最初的 RSS 阅读器是在电脑上安装的一个客户端。

我认为 RSS 阅读器就是一种特殊的自带“阅读模式”的浏览器。我可以用普通浏览器去看,也可以用浏览器提供的“阅读模式”去看,也可以用 RSS 阅读器去看。

如果我喜欢这个内容,我自然会跳转回原站点赞收藏。

换一个理解方式:现在很多笔记软件都提供“网页剪藏”,将一个网页剪藏到笔记中,还可以去掉页面上无关部分。RSS 阅读器相当于对我关注的作者,每出来一篇新文章就自动帮我剪藏了。我认为这不算盗版。因为作为用户,我有权决定如何处理这些我消费的内容。

这个问题继续讨论下去就是:你认为我们更应该维护读者还是作者的利益?比如现在很多浏览器可以安装“去广告”插件,也许原作者希望你看广告,按你的逻辑,这更是对原作者利益的直接侵犯。但读者有时候也深受广告之苦,所以又有人开发了“李跳跳”之类的跳过广告应用。
98 天前
回复了 yiboliueki 创建的主题 Windows 有没有剪贴板历史记录的软件
CLCL
TS 相对于 js 多加了很多东西,为的是大型工程中多人协作更可维护,js 更基础,所以先学 js 。
要开发一个网站不只需要学 js ,还有 HTML / CSS 这些,可以看看 https://csdiy.wiki/ 的 Web 开发 部分

协作就是双方约定好一个接口 / 规范 / 协议,规定了数据如何传输,以及这些数据的含义。类比的话就是现在的 USB / 蓝牙之类的接口,如果主机和设备都支持了这些接口就可以通信。
Web 开发中的前后端,底层是通过网络协议通信,具体来讲,最底层是 TCP ,然后是 HTTP ,然后是应用自己约定的协议。
最简单的直接用环境变量
没有复杂嵌套的用 ini
复杂的用 json5 或 json
不推荐 yaml ,这玩意一旦规模上去之后,可读性大幅下降。而且 spec 相当复杂,不同语言实现出来的 yaml parser 可能有功能上的差异,导致同一个配置文件,无法在不同语言之间迁移
默认的 Go 插件,在代码里用到啥就会导入啥啊,在下面的代码里直接写 rand ,然后一个“.” 然后要调用的函数名,自动给你补上 import
118 天前
回复了 jlak 创建的主题 Go 编程语言 写 Go 真的好爽
我也觉得,心智负担低到甚至可以用记事本一遍写出可以通过编译的代码
1  2  3  4  5  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3121 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 37ms · UTC 13:34 · PVG 21:34 · LAX 05:34 · JFK 08:34
Developed with CodeLauncher
♥ Do have faith in what you're doing.