赋值运算符
| 运算符 | 描述 |
|---|---|
| = | 将一个表达式的值赋给一个左值 |
| += | 相加后再赋值 |
| -= | 相减后再赋值 |
| *= | 相乘后再赋值 |
| /= | 相除后再赋值 |
| %= | 取余后再赋值 |
| <<= | 左移后赋值 |
| >>= | 右移后再赋值 |
| &= | 按位与后赋值 |
| 、= | 按位或后赋值 |
| ^= | 按位异或后赋值 |
变量 、常量、字面量
变量类型
| 类型 | go变量类型 | fmt输出 |
|---|---|---|
| 整形 | int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 | %d |
| 浮点型 | float32\float64 | %f \ %e %g |
| 复数 | complex128 complex64 | %v |
| 布尔型 | bool | %t |
| 指针 | uintptr | %d |
| 引用类型 | map、slice、channel | %v |
| 字节 | byte | %d |
| 任意字符 | rune | %d |
| 字符串 | string | %s |
| 错误 | error | %v |
变量初始化
-
如果声明后未显式初始化,数值类型初始化0,字符串初始化为空字符串,布尔型初始化为false,引用类型,函数、指针,接口初始化巍峨nil.
-
函数内部的变量(非全局变量),可以通过:=声明并初始化 a:=3
-
下划线表示匿名变量 _=2+4 匿名变量不占命名空间,不会分配内存,因此可以重复命名
常量
常量在定义必须赋值,且程序运行期间其值不能改变。
const PI float32 = 3.14 //通过常量命名为大写
const(
PI=3.14
E=2.71
)
const(
a=100
b //100,跟上一行一样
c //100,跟上一行一样
)
iota
在常量中使用,引入后,会逐行加一
import (
"fmt"
)
const (
a = iota //iota 只能在const中使用,初始值为0
b
c
)
const (
a1 = iota //iota 只能在const中使用,初始值为0
_ //1
b2 //2
c3 //3
)
const (
e, d, t = iota + 1, iota + 2, iota + 3
r, f, v //不赋值和上一行保持一致。
)
func main() {
fmt.Printf("a = %d b=%d c=%d \n", a, b, c)
fmt.Printf("a1 = %d b2=%d c3=%d \n", a, b, c)
fmt.Printf("e = %d , d = %d ,t=%d \n r = %d ,f = %d ,v = %d ", e, d, t, r, f, v)
}
字面量
字面量:没有出现变量名,直接出现了值,基础类型的字面量相当于时常量
fmt.Printf("%t\n",04==4.00)
变量作用域
var(
A=3 //全局变量,大写字母开头,所有地方都可以访问,跨package访问时需要带上package名称
b=4 //全局变量,小写字母开头,本package内都可以访问
)
func foo(){
b:=5 //局部变量,仅本函数内可以访问,内部声明的变量可以跟外部声明的变量有冲突,以内部的
{
b:=6 //仅{}圈定的作用域内可以访问,可以跟外部的变量有冲突
}
}