Go语言之常量

常量定义:在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 语言的常量可以是十进制数、八进制数或者十六进制的数。

  • 前缀是0x或0X为十六进制
  • 前缀是0的为八进制
  • 十进制无前缀

整数还可以有一个后缀,它是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有递增效果,所以可以实现枚举。

你可能感兴趣的:(Golang,Go常量)