常量定义:在Go语言中,常量是指编译期间就已知,且在执行期间不会改变的固定值
Go语言程序中,常量可定义为数值(整型、浮点型和复数类型)、布尔或字符串等类型。
常量的声明需要用到关键字const,常量的定声明格式为const indentifier [type] = value,就像这样:
const Pi = 3.1415926536
// 也可以明确指定常量的类型
const Pi float32 = 3.1515926536
// 也可以是布尔值、字符串等
const Return = true
const hello = "你好,Go语言"
// 甚至可以是中文
const 人数 = 100
以上的例子你可以看出,声明常量时省略掉了[type],这是因为Go语言的编译器会智能地判断值的类型:
显示定义:const h string = "hello"
隐式定义:const w = "world"
除此之外,Go语言比较有趣的一点就是支持超长的小数位数,但是若果指定了常量为float32类型,Go语言编译器会自动缩短常量为32b,若是指定了常量为float64,则Go语言会自动缩短为64b。而且Go语言支持反斜杠\,可以在定义常量表达式中使用反斜杠作为跨行的连接符使用,这与Linux的shell命令一样,就像这样:
const Pi = 3.141592653589793\
2384\
值得注意,既然常量是固定值得,这个固定值是指在编译时可以确定,也就是说在赋值表达式中涉及计算过程,但是必须在编译期间就能确定所有用于计算常量的值。就像这样:
const c1 = 6/3 // 得到数2
// const c2 = getNumber(number) // getNumber是用户自定义的函数,其值是不确定的,在代码编译期间
// 因为自定义函数的返回值未知,所以不能赋值给常量。但是内置函数可以,比如len()函数
n := "hello"
l := len(n) // 得到5
常量的数字表示
Go 语言的常量可以是十进制数、八进制数或者十六进制的数。
整数还可以有一个后缀,它是U和L的组合,分别用于表示unsigned和long。后缀可以是大小写字母,顺序也是任意的。就像这样:
3.14 // 十进制,合法
0213 // 八进制,合法
0x4b // 十六进制,合法
oxFeeL // 十六进制,合法
30u // 无符号整型,合法
30l // long,合法
30ul // 无符号long,合法
078 // 非法,八进制数不能出现8
032uu // 非法
转义字符
与其他语言一样,Go语言使用反斜杠表示转义符号,例如换行符(\n)或制表符(\t)。转义代码列表如下:
转义序列 | 含义 |
---|---|
\\ | \字符 |
\’ | '字符 |
\? | ?字符 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
示例如下:
package main
import "fmt"
func main(){
fmt.Println("Hello\tWorld") \\ 水平制表
fmt.Println("Hello\rWorld") \\ 回车,等同于换行
}
常量赋值
常量赋值,就像这样:
package main
import "fmt"
func main() {
a := 20
c := 200
c = a
fmt.Println("赋值操作,把a值赋给c,所以c值为:",c)
c += a
fmt.Println("相加和赋值运算符,等同于 c = c + a,所以c值为:",c)
c -= a
fmt.Println("相减和赋值运算符,等同于 c = c -a,所以c值为:",c)
c *= a
fmt.Println("相乘和赋值运算符,等同于 c = c * a,所以c值为:",c)
c /= a
fmt.Println("相除和赋值运算符,等同于 c = c/a,所以c值为:",c)
c <<= 2
fmt.Println("左移和赋值运算符,所以c值为:",c)
c >>= 2
fmt.Println("右移和赋值运算符,所以c值为:",c)
c &= 2
fmt.Println("按位与和赋值运算符,所以c值为:",c)
c ^= 2
fmt.Println("按位异或和赋值运算符,所以c值为:",c)
c |= 2
fmt.Println("按位或和赋值运算符,所以c值为:",c)
与其它编程语言一样,Go语言支持并行赋值的写法,就像这样:
const 人数 , 费用 , 班级 = 40 , 200.01 , "一班"
const (
Monday , Tuesday , Wensday = 1 , 2 , 3
Thursday , Friday , Sunday = 4 , 5 , 7
)
常量枚举
常量还可以用作枚举,就像这样:
package main
import "fmt"
const (
a = iota // a == 0
b // b == 1,隐式使用iota关键字,实际等同于 b = iota
c // c == 2,实际等同于 c = iota
d,e,f = iota,iota,iota // d = 3,e = 3,f = 3 ,同一行值相同,此处不能只写一个iota
g = iota // h = 4,
h = "h" // h = "h"单独赋值,iota依旧递增为5
i // i = "h",默认使用上面的值,iota依旧递增为6
j = iota // j = 7
)
const z = iota // 每个单独定义的const常量中,iota都会重置,此时的iota = 0
func main() {
fmt.Println(a,b,c,d,e,f,g,h,j,z)
}
每个const定义的第一个常量被默认设置为0,显示设置为其他值除外。后续的常量默认设置为他上面那个常量的值,如果上面那个常量的值是iota,则它的值也被设置为iota,因为iota有递增效果,所以可以实现枚举。