【发布时间】:2019-09-22 21:24:04
【问题描述】:
当声明两个 const 变量(一个有类型,一个无类型),并打印出第二个的类型时,如:
const x float32 = 10000
const y = 1e8 / x
fmt.Printf("the type of y: %T \n", y)
// or with reflect:
fmt.Println(reflect.TypeOf(y))
它告诉我,y 的类型是 float32。
这并不奇怪,因为无类型的 const 变量 y 被定义为将无类型的浮点常量除以有类型的浮点常量,因此可以推断出类型。
根据“Go by Example”(https://gobyexample.com/constants),除非明确提供,否则常量永远不会有类型。然而,根据官方 Go 博客文档,无类型常量确实具有可以推断的隐藏类型,但在需要类型之前让常量保持无类型。
我会假设,y 仍然是一个无类型的浮点常量。但是,当使用它来分配新变量时,Goland 的检查员告诉我,可以省略类型:
const z float32 = y
// ^^^ type can be ommitted
最后,我的问题是:
有类型的常量表达式不能声明无类型的常量吗?
【问题讨论】: