【入门】Go语言变量详解
目录
一、变量赋值的几种方式
1.1 声明单个变量
语法:
var name type
- name:变量名称
- type:变量类型
案例:
package main
func main() {
var name string
var age uint
}
1.2 声明多个变量
语法:
var name1,name2 int
案例:
package main
func main() {
var num1,num2 int
}
1.3 初始化变量
在声明变量时对其进行赋值。
案例:
package main
import "fmt"
func main() {
var name string = "qinzt"
var age uint = 22
// 多变量初始化值
var height, weight = 1.78, 60.4
fmt.Printf("姓名:%v 年龄:%d 身高:%.2f 体重%.2f", name, age, height, weight)
}
代码输出结果:
姓名:qinzt 年龄:22 身高:1.78 体重60.40
1.4 变量赋值
在定义变量后,再给变量赋值,也就是先声明后赋值。
案例:
package main
import "fmt"
func main() {
var name string
var age uint
name = "qinzt"
age = 22
fmt.Println(name, age)
}
代码输出结果:
qinzt 22
1.5 自动推导类型方式声明变量
自动推到类型:在声明变量时不需要 var
和 变量类型
其变量类型是变量值来决定的。
语法:
name := value
- name:变量名称
- value:变量值
案例:
package main
import "fmt"
func main() {
name := "qinzt"
age := 22
// 自动推导类型,多变量初始化
height, weight := 1.78, 60.4
fmt.Println(name, age, height, weight)
}
代码输出内容:
qinzt 22 1.78 60.4
二、输出输入格式控制
2.1 输出格式
输出常使用 fmt.Println
和 fmt.Printf
- fmt.Println:会在输出的内容末尾添加一个换行符
- fmt.Printf:格式化字符串来输出内容,可以控制输出的格式和精度
案例:
package main
import "fmt"
func main() {
name := "qinzt"
age := 22
height, weight := 1.78, 60.4
fmt.Println(name, age, height, weight)
fmt.Printf("姓名:%v 年龄:%v 身高:%.2f 体重:%.2f", name, age, height, weight)
}
- %v: 值的默认格式表示
- %.2f: 输出浮点类型,.后面2位
代码输出内容:
qinzt 22 1.78 60.4
姓名:qinzt 年龄:22 身高:1.78 体重:60.40
2.1 输入格式
输出常使用 fmt.Scan
可以接受输入的内容将其赋值给变量
案例:
package main
import "fmt"
func main() {
var name string
var age int
fmt.Println("请输入您的姓名:")
fmt.Scan(&name)
fmt.Println("请输入您的年龄:")
fmt.Scan(&age)
fmt.Printf("姓名:%v 年龄:%v", name, age)
}
代码输出内容:
请输入您的姓名:
qinzt
请输入您的年龄:
22
姓名:qinzt 年龄:22
2.3 输出变量对应的地址
在内存中变量会开辟对应的存储单元,为了能够找到该存储单元对应数据,系统会给每个单元加上一个编号,这个编号就是变量的地址
案例:
package main
import "fmt"
func main() {
var name string
var age int
fmt.Println(&name, &age)
fmt.Printf("%p %p", &name, &age)
}
代码输出内容:
0xc000050270 0xc000018098
0xc000050270 0xc000018098
三、变量数据类型
3.1 整形类型
整形分为两类,分别是 有符号整数
和 无符号整数
- 有符号:既可以表示负数、也可以表示整数、也可以表示零
- 无符号:只能是正整数
1)有符号整数
类型 | 有无符号 | 占用存储空间 | 表数范围 |
---|---|---|---|
int8 | 有 | 1字节 | -128~127 |
int16 | 有 | 2字节 | -32768~32767 |
int32 | 有 | 4字节 | -2147483648~2147483647 |
int64 | 有 | 8字节 | -9223372036854775808~9223372036854775807 |
2)无符号整数
类型 | 有无符号 | 占用存储空间 | 表数空间 |
---|---|---|---|
uint8 | 无 | 1字节 | 0~255 |
uint16 | 无 | 2字节 | 0~65535 |
uint32 | 无 | 4字节 | 0~4294967295 |
uint64 | 无 | 8字节 | 0~18446744073709551615 |
3)其他整数类型
类型 | 有无符号 | 占用存储空间 |
---|---|---|
int | 有 | 32位系统占4字节,64位系统占8字节 |
uint | 无 | 32位系统占4字节,64位系统占8字节 |
rune | 有 | 等价于init32 |
byte | 无 | 等价于unit8 |
3.2 浮点类型
浮点类型底层存储:包括float32
和 float64
存储小数,会丢失精度
- float32:精确到小数点后7位
- float64:精确到小数点后15位
类型 | 存储空间 | 表数范围 |
---|---|---|
float32 | 4字节 | -3.403E38~3.403E38 |
float64 | 8字节 | -1.798E308~1.798E308 |
3.3 布尔类型
布尔类型变量只有两种结构,True、False、默认值是False
案例:
package main
import "fmt"
func main() {
var isEnable bool
fmt.Println(isEnable)
fmt.Printf("%t %T", isEnable, isEnable)
}
- %t:输出布尔类型
- %T:输出变量类型
代码输出结果:
false
false bool
3.4 字符类型
字符类型变量使用 byte
类型定义,单个引号引起的单个字符为字符类型,字符类型默认以ASCII码格式。
案例:
package main
import "fmt"
func main() {
var ch byte = 'A'
fmt.Println(ch)
fmt.Printf("%c %d", ch, ch)
}
- %c:字符串输出,不以ASCII输出
- %d:十进制整数输出,以ASCII输出
代码输出结果:
65
A 65
3.5 字符串类型
- 字符串类型变量使用
string
类型定义 - 变量值需要使用双引号引用
- 字符串结束符是 "\0" 这个我们是看不到的
- 在Go语言中,一个汉字占3字符
案例:
package main
import "fmt"
func main() {
var name string = "欲情故纵"
fmt.Printf("%s %d\n", name, len(name))
name = "qinzt"
fmt.Printf("%s %d", name, len(name))
}
代码输出内容:
欲情故纵 12
qinzt 5
四、拓展
4.1 强制类型转换
- 类型转换用于将一种数据类型,转换成另一种数据类型。
- 在转换时,建议将低类型转换成高类型,保证数据精度。
- 如果高类型转换低类型,可能会丢失精度,或者出现移除。
案例:
package main
import "fmt"
func main() {
var num1 int = 100
var num2 float32 = 200
// 将num1转换成int64类型
fmt.Printf("%d\n", int64(num1))
// 将num2转换float64类型
fmt.Printf("%.2f", float64(num2))
}
代码执行结果:
100
200.00
4.2 fmt.Printf格式化输出
- %d:十进制整数
- %f:浮点数
- %s:字符串
- %t:布尔值
- %v:任何值的默认格式表示
- %p:指针的十六进制表示
- %b:二进制表示
- %o:八进制表示
- %x:十六进制表示(小写字母)
- %X:十六进制表示(大写字母)
- %e:科学计数法表示(小写字母 e)
- %E:科学计数法表示(大写字母 E)
- %c:Unicode 字符
- %q:带引号的字符串
- %%:百分号本身