一、为什么需要变量?
因为变量是程序的基本组成单位
- 变量:变量相当于内存中一个数据存储空间的表示(变量表示内存中的一个存储区域),通过变量名可以访问变量值。
- 使用步骤:
- 声明/定义变量:声明变量后若不赋值,使用默认值
- 变量赋值
- 使用变量
//声明变量,不赋值,只用默认值
var a int
fmt.Println(a) //0
var b = 123.456
fmt.Printf("b的类型%T\n", b) //b的类型float64
//一次声明多个变量,自动推导类型(省略var)
id, name, age := 4, "hjx", 24
fmt.Printf("%T,%T,%T\n", id, name, age) //int,string,int
id = 3
fmt.Println(id) //3
- 初始化变量:在声明变量时,就给其赋值
var str string = "hello world"
fmt.Println(str)//hello world
二、数据类型
1、整型数据:
- go的整形默认为int型
-
unsafe.Sizeof(name)返回name占用的字节数
- 年龄可以使用byte表示(1-100)
- bit:计算机中最小的存储单位,byte:计算中基本存储单元
2、浮点数:
- go的浮点数的默认声明为float64
- 浮点数=符号位+指数位+尾数位(浮点数都是有符号的)
3、字符类型:
- go语言中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte保存
- 字符串就是一串固定长度的字符连接起来的字符序列。(go的字符串是由单个字节连接起来的的)。传统发字符串是由字符组成,而go的字符串不同,它是由字节组成的
- 保存的字符在ASCII表,直接可以保存到byte
- 保存的字符对应码值>255,用int保存
- go语言中英文-1个字节,汉字-3个字节
- 存储:字符-》对应码值-》二进制-》存储
- 读取:二进制-》码值-》字符-》读取
4、string类型:
- 字符串就是一串固定长度的字符连接起来的字符序列。(go的字符串是由单个字节连接起来的的)。
- 字符串一旦赋值了,字符串就不能修改了;在go中字符串是不可变的。
5、指针类型:
- 指针类型:指针变量存的是一个地址,这个地址指向的空间存的才是值
6、值类型和引用类型:
- 值类型:变量直接存储值,内存中通常在栈中分配
基本的int类型,float类型,bool,string,数组,结构体struct
- 引用类型:变量存储的是一个地址,地址对应的空间才是真正存储数据的值,内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由gc来回收。
指针,slice切片,map,管道chan,interface
7、运算符:
- ++/--:
go语言的自增自减只能当做一个独立语句使用;i++
go语言的++和--只能写在变量的后面,不能写在变量的前面