Go常量与运算符

常量的定义

  • 常量的值在编译时就已经确定
  • 常量的定义格式与变量基本相同
  • 等号右侧必须是常量或者常量表达式
  • 常量表达式中的函数必须是内置函数
package main

import (
	"fmt"
)

const a int = 1
const b = 'A'

const (
	c = a
	d = a + 1
	e = a + 2
)

func main() {
	fmt.Println(a, b, c, d, e)

}

常量的初始化规则与枚举

  • 在定义常量组时,如果不提供初始值,则表示将使用上行的表达式
  • 使用相同的表达式不代表具有相同的值
package main

import (
	"fmt"
)

const (
	a = "123"
	b = len(a)
	c
)

func main() {
	fmt.Println(a, b, c)
}
//可以看到b和c打印的结果都为3
package main

import (
	"fmt"
)

const (
	a, b = 1, "20"
	c, d
)

func main() {
	fmt.Println(a, b, c, d)
}
//可以看到a和c为1, b和d为20,这里需要注意的是如果你想要使用常量初始化规则的话,每一行的常量的个数必须是一致的~
  • itoa是常量的计数器,从0开始,组中每定义1个常量自动递增1
  • 通过初始化规则与iota可以达到枚举效果
  • 每遇到一个const关键字,iota就会重置为0
package main

import (
	"fmt"
)

const (
	a = "A"
	b
	c = iota
	d //d的值为3
)
const (
	e = iota
	f
	//e的值为0,f的值为1
)

func main() {
	fmt.Println(a, b, c, d, e)
}
package main

import (
	"fmt"
)

const (
	a = "A"
	b
	c = iota
	d //d的值为3
)
const (
	e = iota
	f
	//e的值为0,f的值为1
)

//星期枚举
const (
	//第一个常量不可省略表达式
	Sunday = iota
	Monday
	Tuesday
	Wednesday
	Thursday
	Friday
	Saturday
)

func main() {
	fmt.Println(a, b, c, d, e)
	fmt.Println(Sunday)
	fmt.Println(Monday)
	fmt.Println(Tuesday)
	fmt.Println(Wednesday)
	fmt.Println(Thursday)
	fmt.Println(Friday)
	fmt.Println(Saturday)
}

运算符

  • go中的运算符均是从左至右结合
  • 优先级
^      !                                               (一元运算符)
*       /    %    <<    >>    &      &^
+      -     |      ^                                (二元运算符)
==   !=   <    <=    >=    >
<-                                              (专门用于channel)
&&
||
package main

import (
	"fmt"
)

/*
6:二进制表示 0110
11:二进制表示 1011
---------
& 和运算符 0010  2
| 或运算符 1111  15
^ 两位只有一个是1的时候可以表示为1  1101  13
&^ 如果第二个数当中的这一位是1的话,就要把第二个数当中改为0   0100  4
*/

func main() {
	fmt.Println(^2)
	fmt.Println(!true)   //取反
	fmt.Println(1 << 10) //向左移10位,是二进制的移动
	fmt.Println(6 & 11)
	fmt.Println(6 | 11)
	fmt.Println(6 ^ 11)
	fmt.Println(6 &^ 11)
	a := 1
	if a > 0 && (10/a) > 1 { //跟sehll中的&&类似
		fmt.Println("OK")
	}

}

原文地址:https://www.cnblogs.com/skymyyang/p/7594915.html