变量类型
类型 | go变量类型 | fmt输出 |
---|---|---|
整型 | int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 | %d(十进制) %b(二进制) %x(十六进制) |
浮点型 | float32 float64 | %f(普通形式) %e(科学计数法,10的指数幂的形式) %g(e和f之间) |
布尔型 | bool | %t |
指针 | uintptr(取地址用&,例如&a 取变量a的地址) | %p |
引用 | map slice channel | %v(万能的) |
字节 | byte (8位 1字节 1字符) | %c |
任意字符 | rune (32位 4字节 1字符) | %c %U(unicade 编码) |
字符串 | string | %s |
错误 | error | %v(普通),%+v(详细),%#v(最详细) |
补充:%T
表示类型,在打印的时候可以用来显示变量的类型
变量声明
Go语言变量必须先声明再使用,所谓使用指读取或修改。
标题声明
var name string
var age int
var isOk bool
批量声明
var (
name string
age int
isOk bool
)
变量初始化
如果声明后未显式初始化
- 数值型初始化0
- 字符串初始化为空字符串
- 布尔型初始化为false
- 引用类型、函数、指针、接口初始化为nil。
var a string="china" //初始化一个变量
var a="china" //类型不指定可以推断,推断为string
var a,b int=3,7 //初始化多个变量
var a,b="china",7 //初始化多个变量,每个变量都单独地执行类型推断
函数内部的变量(非全局变量)可以通过:=声明并初始化。
a:=3
下划线表示匿名变量。匿名变量不占命名空间,不会分配内存,因此可以重复使用。
_=2+4
常量
常量在定义时必须赋值,且程序运行期间其值不能改变。
const PI float32=3.14
const(
PI=3.14
E=2.71
)
const(
a=100
b //100,跟上一行的值相同
c //100,跟上一行的值相同
)
iota
iota是go语言的常量计数器,只能在常量的表达式中使用。
使用iota时只需要记住以下两点
-
iota在const关键字出现时将被重置为0。
-
const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。
使用iota能简化定义,在定义枚举时很有用
const(
a=iota //0
b //1
c //2
d //3
)
const(
a=iota //0
b //1
_ //2
d //3
)
//跳过一个
const(
a=iota //0
b=30
c=iota //2
d //3
)
//忽略第一个
const(
_=iota // iota =0
KB=1<<(10* iota) // iota =1
MB=1<<(10* iota) // iota =2
GB=1<<(10* iota) // iota =3
TB=1<<(10* iota) // iota =4
)
//下面未显式定义的常量会复制前面的复制模式
const(
a,b=iota+1, iota+2 //1,2 iota =0
c,d //2,3 iota =1
e,f //3,4 iota =2
)
字面量
字面量--没有出现变量名,直接出现了值。基础类型的字面量相当于是常量。
fmt.Printf("%t\n", 04 == 4.00) //用到了整型字面量和浮点型字面量
fmt.Printf("%v\n", .4i) //虚数字面量 0.4i
fmt.Printf("%t\n", '\u4f17' == '众') //Unicode和rune字面量
fmt.Printf("Hello\nWorld\n!\n") //字符串字面量
标签:初始化,const,字面,常量,var,GO,iota,变量
From: https://www.cnblogs.com/guangdelw/p/17784805.html