为什么需要变量?
- 变量是程序的基本组成单位
- 不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位
变量介绍
概念
变量相当于内存中一个数据存储空间的表示,你可以把变量看作是一个房间的门牌号,通过门牌号我们可以找到房间,同样的道理,通过变量名可以访问到变量(值)。
变量使用的基本步骤
- 声明变量(定义变量)
- 非变量赋值
- 使用变量
变量使用快速入门
func main(){
//定义变量
var i int
//给i赋值
i = 10
//使用变量
fmt.Println("i=",i)
}
变量使用注意事项
- 变量表示内存的一个存储区域
- 该区域有自己的名称(变量名)和类型(数据类型)
- Golang变量使用的三种方式
- 指定变量类型,声明后若不赋值,使用默认值
- 根据值自行判定变量类型(类型推导)
- 省略var。注意
:=左侧的变量不应该是已经声明过的,否则会导致编译错误。
func main(){ //1)指定变量类型,声明后若不赋值,使用默认值 var i int //int 默认值为0 fmt.Println("i=",i) //2) 根据值自行判定变量类型(类型推导) var num = 12.13 //浮点型 var str = "I love" //字符串类型 //3) 省略var name := "JiuNuan" //等价于var name = "JiuNuan" } - 多变量声明
在编程中,有时我们需要一次性声明多个变量,Golang也提供这样的语法。
func main(){
//1)指定变量类型,声明后若不赋值,使用默认值
var i, j, k int //int 默认值为0
fmt.Println("i=", i,"j=", j, "k=", k)
//2) 根据值自行判定变量类型(类型推导)
var a, num, str = 2023, 8.17, "I love"
//对应的 a = 2023
// num = 8.17
// str = "I love"
//3) 省略var
a, num, str := 2023, 8.17, "I love"
//对应的 a = 2023
// num = 8.17
// str = "I love"
}
- 该区域的数据值可以在同一类型范围内不断变化【重点】
6. 变量在同一作用域内(在一个函数或者在代码块)内不能重名
- 变量=变量名+值+数据类型——变量的三要素
- Golang的变量如果没有赋初值,编译器会使用默认值,比如 int 默认值为 0,string 默认值为 空串。
变量的声明,初始化和赋值
声明变量
基本语法:var+变量名+数据类型
var a int 这就是声明了一个整型变量,变量名是a
var num float32 这声明了变量,表示一个单精度类型的小数,变量名是num
初始化变量
在声明变量的时候,就给值
var a int = 45 这就是初始化变量a
使用细节:如果声明时就直接赋值,可省略数据类型,如var b = 100
给变量赋值
比如你先声明变量:var num int -->默认为 0
然后,再给值num = 780,这就是给变量赋值
程序中的"+"使用
- 当左右两边都是数值型时,则做加法运算
- 当左右两边都是字符串,则做字符串拼接
变量的数据类型
每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。
mindmap
数据类型
基本数据类型
数值型
整数类型
int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、byte
浮点类型
float32、float64
字符型
没有专门的字符型,使用byte来保存单个字母字符
布尔型(bool)
字符串(string)
派生/复杂数据类型
指针(Pointer)
数组
结构体(struct)
管道(channel)
函数
切片(slice)
接口(interface)
map
整数类型
基本介绍
在Golang中,整数类型包括有符号整数和无符号整数。 下面是Golang中常用的整数类型及其范围:
| 整数类型 | 符号及存储空间 | 范围 |
|---|---|---|
| int8 | 有符号8位整数 | - ~ -128~127 |
| int16 | 有符号16位整数 | - ~ -32768~32767 |
| int32 | 有符号32位整数 | - ~ -2147483648~2147483647 |
| int64 | 有符号64位整数 | - ~ -9223372036854775808~9223372036854775807 |
| int | 有符号整数 | 在32位系统上为32位,在64位系统上为64位,范围根据系统而定 |
| uint8 | 无符号8位整数 | ~ 0~255 |
| uint16 | 无符号16位整数 | ~ 0~65535 |
| uint32 | 无符号32位整数 | ~ 0~4294967295 |
| uint64 | 无符号64位整数 | ~ 0~18446744073709551615 |
| uint | 无符号整数 | 在32位系统上为32位,在64位系统上为64位,范围根据系统而定 |
| rune | 有符号32位整数 | - ~ -2147483648~2147483647 等价int32,表示一个Unicode码 |
| byte | 无符号8位 | ~ 0~255 当要存储字符时,选用byte |
需要注意的是,整数类型在不同系统上的大小可能会有所不同,具体取决于所使用的操作系统和底层硬件平台。使用时应根据实际需求选择适当的整数类型,以确保数据的表示范围和精度符合预期。
整型的使用细节
- Golang各整数类型:有符号和无符号,int uint的大小和系统有关
- Golang的整型默认声明为int型
- 如何在程序查看某个变量的字节大小和数据类型
var i int = 100
fmt.Printf("i的数据类型%T 占用的字节数是%d", i, unsafe.Sizeof(i))
//unsafe.Sizeof()函数获取字节大小
4. Golang程序中整型变量在使用时,遵守保小不保大的原则,即在保证程序正常运行下,尽量使用占用空间小的数据类型
5. bit:计算机中最小存储单位
byte:计算机中基本存储单元
1 byte = 8 bit
小数类型/浮点型
基本介绍
| 类型 | 符号及存储空间 | 范围 |
|---|---|---|
| float32 | 单精度,4字节 | -3.403E38~3.403E38 |
| float64 | 双精度,8字节 | -1.798E308~1.798E308 |
| 注: |
- 浮点数 = 符号位 + 指数位 + 尾数位
- 尾数部分可能丢失,造成精度损失
浮点型使用细节
-
Golang浮点类型有固定的范围和字段长度,不受具体操作系统(32位/64位)的影响
-
Golang的浮点型默认声明为float64
-
浮点型常量有两种表示形式:
- 十进制数形式:5.12、0.512(必须有小数点)
- 科学计数法形式;-
-
通常情况下,使用float64,精度比float32高
字符类型(char)
基本介绍
Golang没有专门的字符类型,如果要存储单个字符(字母),一般用byte保存。
字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的,也就是说对于传统的字符串是由自由组成的,而Go的字符串不同,是由字节组成的。
// 演示golang中字符类型使用
func main() {
var c1 byte = 'a'
var c2 byte = '0' //字符的0
//当我们直接输出byte值,就是输出了的对应的字符的码值
//'a' ==> 97 '0' ==> 48
fmt.Println("c1=", c1)
fmt.Println("c2=", c2)
//如果我们希望输出对应字符,需要使用格式化输出
fmt.Printf("c1=%c \nc2=%c \n", c1, c2)
//var c3 byte =北’//overflow溢出
var c3 int = '北'
//overflow溢出
fmt.Printf("c3=%c c3对应码值=%d", c3, c3)
}
注:
- 如果保存的字符在ASCII表,如0、1、a、b...可以直接保存到byte
- 如果保存的字符对应码值大于255,这时我们可以考虑使用int类型保存
- 如果需要按照字符的方式输出,这时需要格式化输出
即
fmt.Printf("%c",c)
字符类型使用细节
- 字符常量是用单引号('')包括起来的单个字符。如
var c1 byte = 'a'
var c2 byte = '0' //字符的0
- Go中允许使用转义字符''来将其后的字符转变为特殊字符型常量。如
var c3 char = '\n' //n'表示换行符
- Go语言的字符使用UTF-8编码,UTF-8码值查询
- 在Go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值
- 可以直接给一个变量赋值一个数字,然后按格式化输出时%c,会输出该数字对应的unicode字符
- 字符类型是可以进行运算的,相当于一个整数,因为他都有对应的Unicode码
字符类型本质
- 字符型 存储到 计算机中,需要将字符对应的码值(整数)找出
- 存储:
graph LR 字符 --> 对应码值 --> 二进制 --> 存储- 读取:
graph LR 二进制 --> 对应码值 --> 字符 --> 读取 - 字符和码值的对应关系是通过字符编码表决定的
- Golang的编码都统一成了UTF-8
布尔类型(bool)
基本介绍
- bool类型数据只允许取值true和false
- bool类型占1个字节
- bool类型适用于逻辑运算,一般用于程序流程控制
- bool类型不可用1或0代替true或false,这与C语言不同
字符串类型(string)
基本介绍
字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的Go语言的字符串的字节使用UTF-8编码标识Unicode文本
注意事项和使用细节
-
Golang的字符串的字节使用UTF-8编码表示Unicode文本,这样Golang统一使用UTF-8编码,中文乱码问题不会困扰程序员
-
字符串一旦赋值,字符串就不能修改了:在Go中字符串是不可变的
-
字符串的两种表示形式
- 双引号(""),会识别转义字符
- 反引号(``),以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果
func main() { //双引号(""),会识别转义字符 str1 := "Hello World\n" //反引号(``),以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果 str2 := `fmt.Printf("Hello World\n")` fmt.Printf(str1) fmt.Printf(str2) } -
字符串的拼接方式:加号(+)