go的常量
常量意如起名,是不会变化的量,量就是值。常量是程序运行时,系统中某个位置里的数值。
常量分类
常量分为以下几类:
布尔,boolean
符号,rune
整数,integer
浮点数,floating-point
复数,complex
字符串,string
其中符号(rune)、整数(intrger)、浮点数(floating-point)和复数(complex)型常量,又被称为数值常量(numeric constants)。
常量表示
常量的值有下面几种表达方式:
符号,rune
整数,integer
浮点数,floating-point
虚数,imaginary
字符串,string
指向常量的标记符,identifier denoting a constant
常量表达式,constant expression
结果为常量的类型转化, a conversion with a result that is a constant
内置函数的返回结果
内置的常量true和false
内置的常量标识符iota
数值型常量的值与所显示值一致,不会出现溢出
,IEEE-754中的“-0”(negative zero)、“无穷大”(infinity)、“非数”(not-a-number)没有对应的常量。
常量的类型
常量可以是显示声明了类型的(typed),也可以是未声明类型的(untyped)。
未声明类型的常量会依据它的值获得一个默认的类型:
value_type default_type
------------------------------
boolean bool
rune rune
integer int
floating-point float64
complex complex128
string string
例如:
i := 3
j := 3.0
"3"是一个untyped的常量,因为3是一个整数,它的默认类型就是int。
"3.0"是一个浮点数,它的默认类型是float64。
数值型常量的范围
可以在代码中写出任意大小的数值,但是代码中写出数未必能被编译器支持。
编译器支持的最大数值是有上限的,在代码中可以写入的数字确实无限的。
go的编译器做了以下承诺:
至少支持256个比特长度的整数
至少支持256个比特长度的小数
如果整数数值超过支持的范围,编译器报错
如果浮点数和复数溢出,编译器报错
如果浮点数和复数超出了支持的精度,使用最接近的数值
例如下面的代码编译时会报错:
package main
func main() {
i := 115792089237316195423570985008687907853269984665640564039457584007913129639936
}
Error:
./main.go:6: constant 115792089237316195423570985008687907853269984665640564039457584007913129639936 overflows int
2^256=115792089237316195423570985008687907853269984665640564039457584007913129639936