3 回答

TA贡献1796条经验 获得超7个赞
Go 团队最近发表了一篇关于此的博客文章,我建议您阅读。
从介绍
Go 是一种静态类型语言,不允许混合数字类型的操作。您不能将 float64 添加到 int,甚至不能将 int32 添加到 int。然而,写 1e6*time.Second 或 math.Exp(1) 甚至 1<<('\t'+2.0) 都是合法的。在 Go 中,常量与变量不同,其行为与常规数字非常相似。这篇文章解释了为什么会这样以及它意味着什么。
TLDR - Go 中的常量是无类型的。它们的类型只在最后一刻才结晶。
这解释了你上面的问题。给定的
func f(int) {}
然后
f(1) // ok
f(1.000) // OK
f(1.0E6) // OK
f(1.0001) // BAD

TA贡献1772条经验 获得超6个赞
你的第一个程序可以这样重写:
package main
func main() {
f(1.000001)
}
func f(int) {}
这显然不是将整数值传递给整数函数。
您的第二个程序可以类似地重写为:
package main
import "fmt"
func main() {
fmt.Printf("%T %v\n",1.000001,1.000001)
fmt.Printf("%T %v\n",1,1)
f(1)
}
func f(int) {}
这看起来不错。
我所做的只是手动替换a和b常量。这就是一切。
- 3 回答
- 0 关注
- 262 浏览
添加回答
举报