Go语言变量 | 青训营
Golang中所有的值类型变量常量都会在声明时被分配内存空间并赋予默认值
值类型变量常量:在Golang中,有一些数据类型是属于值类型的,比如基本类型(数字型、布尔型、字符串型、字符型)和数组类型。这些数据类型的变量或常量在声明时都会在内存中分配一块固定大小的空间,并赋予默认值。当对这些变量或常量进行赋值或传递时,都会发生拷贝,也就是说,会创建一个新的副本,并把原来的值复制到新的空间中。这样做的好处是可以保证数据的安全性,不会被其他变量或函数修改;但是也有一些缺点,比如会增加内存和性能的开销,以及可能导致数据不一致。
引用类型变量常量:在Golang中,有一些数据类型是属于引用类型的,比如切片、映射、结构体、接口等。这些数据类型的变量或常量在声明时并不会直接在内存中分配空间,而是需要使用make函数或者字面量来初始化,并返回一个指向数据的指针。当对这些变量或常量进行赋值或传递时,并不会发生拷贝,而是会共享同一个数据空间。这样做的好处是可以节省内存和性能,以及可以实现数据之间的通信;但是也有一些缺点,比如可能导致数据被意外修改,或者出现空指针错误。
// 整数型:表示整数(正数、负数、零)的数据类型
// Golang中有多种整数型,根据长度和符号不同可以分为int8, int16, int32, int64, uint8, uint16, uint32, uint64, int, uint等
// int和uint会根据操作系统自动来判断是int32还是int64
// 整数型可以使用十进制、二进制、八进制、十六进制来表示,分别使用无前缀、0b/0B前缀、0o/0O前缀、0x/0X前缀
var i1 int = 10 // 十进制
var i2 int = 0b1010 // 二进制
var i3 int = 0o12 // 八进制
var i4 int = 0xA // 十六进制
fmt.Println(i1, i2, i3, i4) // 输出10 10 10 10
// 浮点型:表示小数(正数、负数)的数据类型
// Golang中有两种浮点型,分别为float32和float64,根据长度不同可以表示不同精度的小数
// 浮点型只能使用十进制来表示,可以使用科学计数法来简化
var f1 float32 = 3.14 // float32
var f2 float64 = 3.1415926 // float64
var f3 float64 = 1.23e4 // 科学计数法,相当于12300
fmt.Println(f1, f2, f3) // 输出3.14 3.1415926 12300
// 字符型:表示单个字符(字母、数字、符号、汉字等)的数据类型
// Golang中有两种字符型,分别为byte和rune,根据编码不同可以表示不同范围的字符
// byte是uint8的别名,用于表示ASCII码表中的字符,占用一个字节(8位)
// rune是int32的别名,用于表示Unicode码表中的字符,占用四个字节(32位)
// 字符型可以使用单引号或者反引号来表示,也可以使用转义字符来表示特殊字符
var c1 byte = 'A' // byte类型,表示ASCII码表中的大写字母A
var c2 rune = '中' // rune类型,表示Unicode码表中的汉字中
var c3 byte = '\n' // byte类型,表示换行符
var c4 rune = '`' // rune类型,表示反引号符
fmt.Printf("%c %c %c %c\n", c1, c2, c3, c4) // 输出A 中 换行 `
// 布尔型:表示真假(true/false)的数据类型
// Golang中只有一种布尔型,即bool,占用一个字节(8位)
// 布尔型可以使用true或false来表示,也可以使用逻辑运算符来计算
var b1 bool = true // bool类型,表示真
var b2 bool = false // bool类型,表示假
var b3 bool = 1 > 2 // bool类型,根据比较运算符计算结果为假
var b4 bool = b1 && b2 // bool类型,根据逻辑运算符计算结果为假
fmt.Println(b1, b2, b3, b4) // 输出true false false false
// 字符串型:表示一串字符(字母、数字、符号、汉字等)的数据类型
// Golang中只有一种字符串型,即string,占用不定长度的空间(根据字符串长度而定)
// 字符串型可以使用双引号或者反引号来表示,也可以使用转义字符来表示特殊字符
var s1 string = "Hello" // string类型,表示一串英文字符
var s2 string = "你好" // string类型,表示一串汉字字符
var s3 string = "He said \"Hi\"" // string类型,使用双引号时需要用反斜杠转义内部的双引号
var s4 string = `He said "Hi"` // string类型,使用反引号时不需要转义内部的双引号
fmt.Println(s1, s2, s3, s4) // 输出Hello 你好 He said "Hi" He said "Hi"