V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  liuxu  ›  全部回复第 14 页 / 共 145 页
回复总数  2896
1 ... 10  11  12  13  14  15  16  17  18  19 ... 145  
2022-08-27 22:23:19 +08:00
回复了 cnbatch 创建的主题 程序员 如果说工作日打开 V2EX 是为了摸鱼,那么休息日呢?
小兄弟,聚窟洲等你一战
不止 golang ,外面这几天吵的不可开交的语言都有 nil/null 这个问题
要回答这个问题,可以从 rust 的思想入手

首先在 php/java 这类常规语言开发中,要么返回 null ,要么返回空对象 User{},返回 null 就有个有名的 java 常见的运行时异常 NullPointException ,php 就是 call xxx on null
作为强类型语言,java 定义方法是需要有确定返回类型,如果返回 User 却返回 null ,但是 null 明显不是 User 类型,这个很矛盾,所以调用者即使知道方法返回 User ,却还要处理 null 的情况,而 php 可以不定义返回类型,所以锅就强行推给了方法的调用者


现在就有了楼主说的 2 种解决办法:
1. 返回 null ,让调用者处理 null 问题(目前常规解决方案)
2. 返回空 User ,调用者放心使用返回值,而不用担心问题,但是在业务中却需要注意空 User 问题,例如在 php/laravel 中调用 guard 的方法,$user->isAdmin()就会产生歧义,到底是没有这个 user ,还是 user 的权限不是管理员,只是普通用户

为了解决这个问题,rust 给出了以下解决方案:
首先 rust 中有 Option 这个东西,枚举为:
enum Option<T> {
None,
Some(T),
}
对于你的问题,返回就应该是 Some(User)或者 None ,在方法定义中,由于返回是 enum 枚举 Option<User>,所以 None 和 Some(User)在类型检查中都是合格的
但是到了方法调用时,调用者必须处理 Option<T>,因为 Some(User) != User ,None != User ,即使是 Some(User),也得手动将 Some(User)解析为 User 才能使用
编译器会检查这个问题,所以就不会有运行时异常了,也不会有返回 User 却返回 null 还合规这种矛盾的事情了


golang 的解决方案稍微变换了一下,按照常规解决方案是返回(nil, err),这样在调用时:
if user, err := x.GetUser(); err != nil {return err}

golang 在调用后 if 中处理,如果 err 不为 nil 则 user 值不合规,而不必管是 nil 还是空 User{}
说起来这个和 rust 的 Option 有一点异曲同工之妙
区别就是 rust 是为了编译时合规而给出了 Option 方案,golang 是运行时使用判断 err 给出了 if 方案


而关于担心下游不注意 nil 判断就很多余了,随便给了 api 文档说明:
func (b *Builder) Write(p []byte) (int, error)
方法定义既然给出了(int, error),如果有 error!=nil ,不管 int 真的是 int 还是 nil ,此时都不合规,调用者不能使用,这就是 golang 的规范



当然在 php/java 常用另一种做法,就是在 GetUser()中没有找到方法就 throw 个 Exception 而不是返回 null ,让外面 try/catch 解决,没有触发异常则返回的 User 是合规的对象
对于复杂的代码来说,经常有 try 包 try 的代码,看上去反而有些奇怪,于是有了 php/java 的 try 加 if 判断的混合用法,反倒有点混乱的感觉,具体喜好还是看个人
2022-08-08 12:30:57 +08:00
回复了 helloword001 创建的主题 PHP Java , PHP , Go,哪种语言和框架更适合开发 API 接口?
@helloword001 #5 laravel 吊打一切
2022-08-08 12:23:56 +08:00
回复了 helloword001 创建的主题 PHP Java , PHP , Go,哪种语言和框架更适合开发 API 接口?
@bthulu #88 按照你这种拿 php5.6 进行手动编译部署方式,那我也只能说 java5 不好用了
2022-08-04 17:47:08 +08:00
回复了 yingqiuQAQ 创建的主题 程序员 Iptables 大佬速来。。。
@yingqiuQAQ 那需要在 eth0 和 docker0 上添加 iptables 规则,然后 host 的路由表也要改改,连通下 eth0 和 docker0

vagrant@homestead:~/work/tms-api$ ip route
default via 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 100
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
10.0.2.2 dev eth0 proto dhcp scope link src 10.0.2.15 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

vagrant@homestead:~/work/tms-api$ sudo iptables -t nat -L
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 anywhere
2022-08-04 17:37:28 +08:00
回复了 yingqiuQAQ 创建的主题 程序员 Iptables 大佬速来。。。
docker network 直接使用 host driver
2022-07-21 18:21:19 +08:00
回复了 LxnChan 创建的主题 Linux Ubuntu 有最小化安装的选项吗
就算是 desktop ,安装界面也有“最小化安装”选项,一般老用户都知道

如果是安装界面的更新,直接不联网安装就不会自动更新,安装后的自动更新可能是 apt daily update ,不喜欢这个的老用户一般都会自己关掉

顺便说一下,centos8 eol 已经过期了,你还在给生产安装
2022-07-21 11:27:35 +08:00
回复了 kisshere 创建的主题 程序员 PHP 的 curl 和 Linux 的 curl 命令有区别吗?
没区别,都走 libcurl.solibssl.so ,tcpdump 抓个包看看是不是有一个走了代理,不是一样的出口 ip
2022-07-15 22:00:17 +08:00
回复了 Stendan 创建的主题 哔哩哔哩 如何看待 2021.07.13 B 站崩溃事件
代码出的 bug ,老运维来了也没用,哪怕运维能审核代码,lua 这个 nan 的坑该出问题还是的出

注册中心、自建机房、嫌架构原始的、人员投入不够什么的,这些都是虚的,像 google 、cloudflare 这种不一样该崩还是崩,还有说弱类型语言不行,那强类型语言写的东西不也是 bug 一堆

这个事故只有一个问题,就是拿到 prof 跑的火焰图却不知道怎么分析导致的后面扯的一堆,递归错误从火焰图来看一定是不断重复调用一个方法,哪怕动态解释型语言也会重复一部分代码,对着反推就行了

这个事故出了第一件事应该 top 看哪个进程出了问题,第二件事就是 strace 到进程看看输出,卡到哪里了,然后才会 prof 输出和火焰图,最后再不济 gdb 上去分析,也别说什么生产上 gdb 不合规,生产都崩成这样了,任何能有效恢复服务的分析方式都是正确的方式

看看这报告也说“我们的事件分析平台目前只提供了面向应用的事件查询能力,缺少面向用户、面向平台、面向组件的事件分析能力”,说白了这个事情就是组件底层代码分析能力不够


这也说明了生产环境添加编译调试信息的重要性,像《高性能 mysql 》里面讲的,给生产环境 mysql 添加调试信息,哪怕增加 20%的 cpu 损耗,但是到了出问题分析的时候,绝对会觉得这 20%花的值
2022-07-11 20:33:24 +08:00
回复了 uiosun 创建的主题 程序员 吐槽:到底什么是“优雅”? PHP 的新名词真是含义莫名……
既然都是 phper ,就以你过去曾经提过的 2 个技术问题来回答

第一个:如何生成“连贯的数据”用于自动化测试? https://v2ex.com/t/814879
解决你这个问题,在 laravel 中只需要定义相关 model 和 factory 即可,https://laravel.com/docs/9.x/database-testing
而语法定义非常简单直观:
class BuildingFactory extends Factory
{
public function definition()
{
return [
'user_id' => User::factory(),
'city_id' => City::factory(),
'type' => $this->faker->randomDigit(),
];
}
}
以上建筑 factory 定义了与 user 和 city 的关系,创建建筑会自动创建对应的 user 和 city ,也可以用其他链式语法反着创建


第二个:怎么让一个任务在发起后的第 6 个小时,自动执行? https://v2ex.com/t/787949
这个问题你可以使用 laravel 的调度器,去处理当前超过 6 小时的任务表即可,https://laravel.com/docs/9.x/scheduling
$schedule->job(new BuildingSomting)->everyMinutes();

更常用的,你可以使用队列,通知和任务模块处理此事: https://laravel.com/docs/9.x/queues
ProcessPodcast::dispatch($buildingPodcast)->delay(now()->addHours(6));

回到你的问题,什么是优雅"elegant syntax",就是用非常直观易懂的语法来实现工程任务,laravel 是个工具完备的 web 框架,不需要为了技术方案发帖询问

楼上有人说,书本上说语法糖要慎用,这里我同样引用书上说的:尽信书不如无书,近十年各类编程语言的发展,大量语法糖的加入,就是为了让代码更加通俗易懂
一个麻烦但是不用代理的办法,从国内源 docker pull 依赖的镜像到服务器,然后给本地镜像打上依赖的标签就好了,helm 包镜像拉去方式一般都是 IfNotPresent ,可以自己确认下

如 tencent/aaa/bbb 下载,然后打赏 k8s.io/aaa/bbb 标签就行
2022-07-08 10:44:01 +08:00
回复了 banmuyutian 创建的主题 程序员 systemd 长期开发者 Lennart Poettering 已证实加盟微软
@zbatman
@superchijinpeng
@Saxton

wsl 就是 windows 界的 winpe ,好像啥都可以,又好像啥都没有
2022-07-08 10:35:54 +08:00
回复了 newghost 创建的主题 Rust 感觉 RUST 上手难度有点高开发速度有点慢,
@duke807 #28 ,你这个 rust 黑,我要给我的 gentoo 装满 rust 写的工具,我还要在 gentoo 上写 rust
2022-06-28 13:59:51 +08:00
回复了 wellwellwell 创建的主题 Linux Ubuntu 22.04 如何安装 TL-WDN6200 wifi 驱动?
搜 rtl8812au 芯片的驱动,可以试试这个 https://github.com/gnab/rtl8812au
2022-06-27 13:59:09 +08:00
回复了 wdwwtzy 创建的主题 程序员 这个各大语言性能测试结果挺有意思
@kerrspace C++不清楚,linux 内核下个版本 5.20 要合并 rust 的基础设施了,现在 5.19 ,https://www.phoronix.com/scan.php?page=news_item&px=Rust-For-Linux-5.20-Possible
2022-06-09 11:06:34 +08:00
回复了 Livid 创建的主题 Atom GitHub 宣布会放弃 Atom 项目
想象一下,你将有一个只占 100MB 内存(夸张)的 IDEA Ultimate ,Vscode ,Xcode
2022-06-08 18:26:10 +08:00
回复了 ppj 创建的主题 Linux Linux Shell 进阶
给你们 2 个好用的命令查询网站

https://explainshell.com/

https://quickref.me/
2022-06-06 13:51:02 +08:00
回复了 liqinliqin 创建的主题 程序员 鸿蒙开发板及培训价格 39.9 是不是合适
生态技术支持做好的话,riscv 的板子 39.9 算得上市场优惠价,给我来一块
1 ... 10  11  12  13  14  15  16  17  18  19 ... 145  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2229 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 44ms · UTC 09:27 · PVG 17:27 · LAX 02:27 · JFK 05:27
Developed with CodeLauncher
♥ Do have faith in what you're doing.