GO中的变量、常量、字面量

发布时间 2023-10-24 14:58:48作者: 厚礼蝎

变量类型

类型 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时只需要记住以下两点

  1. iota在const关键字出现时将被重置为0

  2. 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") //字符串字面量