golang的无类型常量

只有常量可以是无类型的。当一个无类型的常量被赋值给一个变量的时候,或者出现在有明确类型的变量声明的右边,无类型的常量将会被隐式转换为对应的类型。

对于常量面值,不同的写法可能会对应不同的类型。例如0、0.0、0i和\u0000虽然有着相同的常量值,但是它们分别对应无类型的整数、无类型的浮点数、无类型的复数和无类型的字符等不同的常量类型。同样,true和false也是无类型的布尔类型,字符串面值常量是无类型的字符串类型。

无类型常量在使用中比较方便,不需要做类型转化:

package main

const zero float32 = 0.0
const zeroV2  = 0.0


func main() {
    //_ = zero < uint64(0.0)  // 报错: invalid operation: zero < uint64(0) (mismatched types float32 and uint64)

    _ = zeroV2 < uint64(0.0)  // 不会报错。
    _ = zeroV2 < float64(0.0) // 不会报错。
    _ = zeroV2 < int(0.0)     // 不会报错。
    _ = zeroV2 < int64(0.0)   // 不会报错。

}

zeroV2 是无类型的浮点数常量,那么它可以直接和整数类型和浮点数类型进行比较。但是确定类型的常量就无法做到,比如zero 这个常量。

部分资料来源于:https://cloud.tencent.com/developer/article/1765937

你可能感兴趣的:(golang的无类型常量)