goLang 的计算语法这么恶心么 ,有优化的写法吗?

22 天前
 erwin1030
low := new(big.Int).Mul(baseFee, big.NewInt(9))

low = new(big.Int).Div(low, big.NewInt(10))

low = low.Add(low, priority25)
7104 次点击
所在节点    Go 编程语言
59 条回复
InkStone
21 天前
@woniu7 当然不能。是怎么样的倔强,让你腆着脸说这个式子能一眼看出要干嘛?

运算符重载可以很不优雅,但现实中 99.9%出现的地方都很优雅。非得鸡蛋里挑骨头找 corner case 当然能找得到,但有什么意义呢?

相比之下 if err != nil 95%的时候都很不优雅,go 里不是照样用着么。
woniu7
21 天前
@InkStone 嘻嘻😁就算不是一眼,但是两眼。你说的对,golang 傻逼,我也不喜欢一刀切。反正个人觉得影响不大,没有一开始那么抵触,只能说是不那么优雅。
Belmode
21 天前
如果是 kotlin 这类后现代语言,甚至可以优化成这样:

var low = baseFee mul 9

low = low div 10

low = log add priority25

这就更清晰易懂便于理解和阅读了!
enchilada2020
21 天前
@arielherself 说白了就是 PL 门外汉 连语言设计者自己都不知道自己在做什么 但反过来 不乏设计优雅的语言曲高和寡 没人用
enchilada2020
21 天前
想知道楼主拿 go 在做什么
wyntalgeer
21 天前
@enchilada2020 #45 eth
ziyeziye
21 天前
@wyntalgeer 你处理区块链的数据 bigint 更没用了,参考我在#29 的回复。
mengzhuo
21 天前
@Donahue

因为大数本来就是要这样算的啊!

动不动就大于 2024 bit 的运算,甚至是 1M 左右的值,每次都 alloc ,任何 CPU/内存都扛不住的啊!!
mengzhuo
21 天前
再回 OP ,算 64 位以下的值,请用 int ,float ,不要没苦硬吃……
kuanat
21 天前
1. 通过链式调用来写,比如

z.Add(&x, &y)
.Mul(&z, &p)
.Div(&z, &q)

这样可以减少中间值的使用,还是比较直观的

2. 使用 dot import ,如果你能将代码作用域规划得非常清晰,可以做到

var i Int // big.Int
j := NewInt()

不推荐但是确实有用

3. 直接使用 ai 的 tab 补全,用注释写数学表达式,配合人工或者测试用例做 review 即可
BeautifulSoap
21 天前
虽然 go 写这种的确不太好写,但主要还是因为不支持运算符重载啊。你随便找个不支持运算符重载的语言来写都是写成这一坨

作为一个写业务的,我是真的讨厌运算符重载。一旦有了这玩意,在对第三方包的对象或者自己很久前写的对方做运算符操作的时候,我都经常会疑神疑鬼的。因为我不知道我用的这玩意是不是什么时候被重载了
fivee
21 天前
,go 时客观存在的,它本身没有强迫你用。你的问题是你自己和让你用 go 的人之间得冲突
Newb1e
21 天前
@BeautifulSoap 确实,有好处,但搁不住有人玩花活
fds
20 天前
后两句可以优化

low := new(big.Int).Mul(baseFee, big.NewInt(9))
low.Div(low, big.NewInt(10))
low.Add(low, priority25)

这样设计主要还是为了节省资源,用户可以选择中间是否使用临时变量,或者哪些变量可以重用等等。
kpsanmao
20 天前
php 的安全运算方法也这个德行啊。
lisxour
20 天前
这跟 go 无关吧,bigint 用起来就是这样的,js 那边也一样,虽然有的可以传 number ,内部自动包装,但本质也是将各个数转 bigint 再运算
realpg
20 天前
虽然我看着也很恶心, 但是我还是希望 OP 能说明 你自己觉得恶心在哪里
你觉得你理想的语言应该怎么写...

我感觉很多人喷你或者支持你, 都没到你的点上 还是说明白的好
iminto
19 天前
big 类型这么写我觉得能接受
lysShub
10 天前
一般业务用不到这个吧,干啥的?

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

https://yangjunhui.monster/t/1128449

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

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

© 2021 V2EX