目录
数据类型表示数据在内存中开辟的空间大小的别称。
在
Go
语言中数据类型可以分为:
基本数据类型
和
派生数据类型
1 Go语言命名规则
命名规则
- 允许使用字母、数字、下划线
- 不允许使用Go语言关键字
- 不允许使用数字开头
- 区分大小写
- 见名知义 (规范而非准则)
驼峰命名法
- 小驼峰式命名法(lower camel case): 第一个单词以小写字母开始,第二个单词的首字母大写,例如:myName、dogAge
- 大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、LastName
2 基本数据类型
Go
语言数据类型分为五种:
- 布尔类型
- 整型类型
- 浮点类型
- 字符类型
- 字符串类型
2.1 布尔型
- 布尔类型也叫做bool类型,bool类型数据只允许取值true或false
- bool类型占1个字节
- bool类型适用于逻辑运算,一般用于流程控制
2.2 整型
- 整型数据分为两类,有符号和无符号两种类型
- 有符号: int, int8, int16, int32, int64
- 无符号: uint, uint8, uint16, uint32, uint64, byte
- 不同位数的整型区别在于能保存整型数字范围的大小
- 有符号类型可以存储任何整数,无符号类型只能存储自然数
- int和uint的大小和系统有关,32位系统表示int32和uint32,如果是64位系统则表示int64和uint64
func main() {
var flag = true
fmt.Print(flag)
var num1 int = 1
var num2 int32 = 123
fmt.Printf("%d,%d\n", num1, num2)
//无符号数就是在存储的时候没有符号位
/*var num3 uint = -11
fmt.Println(num3) */ //cannot use -11 (untyped int constant) as uint value in variable declaration (overflows)
fmt.Printf("%T,%T\n", num1, num2) //输出变量类型
println(unsafe.Sizeof(num1)) //查看变量占用字节 8
println(unsafe.Sizeof(num2)) //查看变量占用字节 4
}
- 十进制整数,使用0-9的数字表示且不以0开头
- 八进制整数,以0开头,0-7的数字表示
- 十六进制整数,以0X或者是0x开头,0-9|A-F|a-f组成
func main() {
//十进制整数,使用0-9的数字表示且不以0开头
var num1 = 123
fmt.Println(num1)
//八进制整数,以0开头,0-7的数字表示
var num2 = 0712
fmt.Println(num2) //458
fmt.Printf("%o",num2) //表示以八进制方式输出num2 712
//十六进制整数,以0X或者是0x开头,0-9|A-F|a-f组成
num := 0x22ff
fmt.Printf("%x",num) //十六进制小写输出num
}
2.3 浮点型
- 浮点数由整数部分、小数点和小数部分组成,整数部分和小数部分可以隐藏其中一种。也可以使用科学计数法表示
- 尾数部分可能丢失,造成精度损失
- float64的精度要比float32的要准确
func main() {
var f1 = 1.2345678
fmt.Println(f1)
fmt.Printf("%.6f\n", f1)
//能否用浮点数来比较是否相等 在这里是可以的 还没有出现误差
var f2 = 1.2345678
if f1 == f2 {
fmt.Println("相等")
}
}
2.4 字符
- Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存
- 字符只能被单引号包裹,不能用双引号,双引号包裹的是字符串
- 字符使用UTF-8编码,英文字母占一个字符,汉字占三个字符
- 可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的unicode字符
- 字符类型是可以运算的,相当于一个整数,因为它们都有对应的unicode码
-
但是如果我们保存的字符大于 255 ,比如存储汉字,这时 byte 类型就无法保存,可以使用rune 类型保存
func main() {
/* // byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8
// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune = int32*/
var char byte = '1'
// var c byte = '哎'//err
fmt.Println(char)
char1 := '中'
fmt.Print(char1) //20013
var char2 rune = '国'
fmt.Println(char2)
fmt.Printf("%c\n", char2) //国
}
2.5 字符串
- 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本
- 字符串一旦赋值了,就不能修改了:在Go中字符串是不可变的
- 字符串的两种标识形式
双引号,会识别转义字符var str = "123\nabc" //输出时会换行 fmt.Println(str)
反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果var str2 = `123\nabc` //输出时原样输出,不会转义 fmt.Println(str2)
2.6 字符串拼接方式"+"
var str = "hello " + "world"
str += "!"
fmt.Println(str) //hello world!
- 当一行字符串太长时,需要使用到多行字符串,可以使用如下处理,需要注意 + 必须在当前行的结尾
3 类型转换
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。两种不同的类型在计算时, Go 语言要求必须进行类型转换。类型转换用于将一种数据类型的变量转换为另外一种类型的变量。Go 语言类型转换基本格式如下:
数据类型
(
变量
)
//
将变量转成指定的类型
数据类型
(
表达式
)
//将表达式转成指定的类型