在 Go 语言中,常量有类型常量和无类型常量之分。类型常量的值具有确定的类型,而无类型常量的值没有确定的类型。下面是一个示例代码:
package main
import (
"fmt"
)
func main() {
// 类型常量
const a int = 10
const b string = "hello"
fmt.Printf("%T %v\n", a, a) // 输出:int 10
fmt.Printf("%T %v\n", b, b) // 输出:string hello
// 无类型常量
const c = 10
const d = "hello"
fmt.Printf("%T %v\n", c, c) // 输出:int 10
fmt.Printf("%T %v\n", d, d) // 输出:string hello
}
在上面的代码中,我们首先定义了两个类型常量 a 和 b,其中 a 的类型为 int,值为 10,b 的类型为 string,值为 “hello”。接着,我们分别使用 %T 和 %v 格式化字符串输出常量的类型和值。
然后,我们定义了两个无类型常量 c 和 d,其中 c 的值为 10,类型未指定,d 的值为 “hello”,类型也未指定。接着,我们同样使用 %T 和 %v 格式化字符串输出常量的类型和值。
从输出结果可以看出,类型常量的类型和值都是确定的,而无类型常量的类型是未指定的,但其值在使用时会隐式转换为需要的类型。比如,在使用无类型常量 c 的时候,它会被隐式转换为 int 类型,而在使用无类型常量 d 的时候,它会被隐式转换为 string 类型。需要注意的是,由于无类型常量的值在使用时可能会被隐式转换,因此在进行数值计算时,最好使用类型常量,以避免因类型转换带来的错误。