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

2025 年 4 月 27 日
 erwin1030
low := new(big.Int).Mul(baseFee, big.NewInt(9))

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

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

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

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

var low = baseFee mul 9

low = low div 10

low = log add priority25

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

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

动不动就大于 2024 bit 的运算,甚至是 1M 左右的值,每次都 alloc ,任何 CPU/内存都扛不住的啊!!
mengzhuo
2025 年 4 月 28 日
再回 OP ,算 64 位以下的值,请用 int ,float ,不要没苦硬吃……
kuanat
2025 年 4 月 28 日
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
2025 年 4 月 28 日
虽然 go 写这种的确不太好写,但主要还是因为不支持运算符重载啊。你随便找个不支持运算符重载的语言来写都是写成这一坨

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

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

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

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

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

https://study.congcong.us/t/1128449

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

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

© 2021 V2EX