避免太多转换

时间:2012-12-19 22:52:43

标签: go

我当前的Go代码中有一些部分如下所示:

i := int(math.Floor(float64(len(l)/4)))

详细程度似乎是必要的,因为某些函数类型签名就像math.Floor中的一样,但它可以简化吗?

2 个答案:

答案 0 :(得分:13)

一般来说,Go的严格输入会导致一些冗长的表达。但是,详细并不意味着口吃。类型转换可以做有用的事情,明确说明这些有用的东西是很有价值的。

简化的技巧是不编写不需要的类型转换,为此您需要参考语言定义等文档。

在您的特定情况下,您需要知道len()返回int,并且值>> = 0.您需要知道4是一个常量,它将采用此表达式中的int类型,并且你需要知道整数除法将返回整数商,在这种情况下,它将是一个非负的int,实际上恰好是你想要的答案。

i := len(l)/4

这个案子很简单。

答案 1 :(得分:2)

我不是100%确定Go如何处理整数除法和整数转换,但它通常是通过截断来实现的。因此,假设len(l)是int

i:=len(l)/4

否则i:= int(len(l))/4i:=int(len(l)/4)应该有效,第一个在理论上略快于第二个。