【发布时间】:2012-12-19 22:52:42
【问题描述】:
我当前的 Go 代码中有一些部分如下所示:
i := int(math.Floor(float64(len(l)/4)))
由于某些函数类型签名,例如math.Floor 中的签名,冗长似乎是必要的,但可以简化吗?
【问题讨论】:
标签: go
我当前的 Go 代码中有一些部分如下所示:
i := int(math.Floor(float64(len(l)/4)))
由于某些函数类型签名,例如math.Floor 中的签名,冗长似乎是必要的,但可以简化吗?
【问题讨论】:
标签: go
一般来说,Go 的严格类型会导致一些冗长的表达式。冗长并不意味着口吃。类型转换做有用的事情,明确说明这些有用的事情是很有价值的。
简化的技巧是不要编写不需要的类型转换,为此您需要参考诸如语言定义之类的文档。
在您的具体情况下,您需要知道 len() 返回 int,并且值 >= 0。您需要知道 4 是一个常量,在此表达式中将采用 int 类型,并且您需要知道整数除法将返回整数商,在这种情况下它将是一个非负整数,实际上正是您想要的答案。
i := len(l)/4
这个案子很简单。
【讨论】:
math.Max 之类的表达式会很烦人。
我不是 100% 确定 Go 如何处理整数除法和整数转换,但通常是通过截断。因此,假设 len(l) 是一个 int
i:=len(l)/4
否则i:= int(len(l))/4 或i:=int(len(l)/4) 应该可以工作,理论上第一个比第二个稍快。
【讨论】: