
基本数据类型
数据类型表示数据在内存中开辟的空间大小的别称。
在Go语言中数据类型可以分为:基本数据类型和派生数据类型
1 Go语言命名规则
命名规则
允许使用字母、数字、下划线
不允许使用Go语言关键字
不允许使用数字开头
区分大小写
见名知义
驼峰命名法
小驼峰式命名法(lower camel case):
第一个单词以小写字母开始,第二个单词的首字母大写,例如:myName、aDog
大驼峰式命名法(upper camel case):
每一个单字的首字母都采用大写字母,例如:FirstName、LastName
2 基本数据类型
Go语言数据类型分为五种:
布尔类型
整型类型
浮点类型
字符类型
字符串类型
| 类型 | 名称 | 长度 | 零值 | 说明 |
|---|---|---|---|---|
| bool | 布尔类型 | 1 | false | 其值不为真即为假,不可以用数字代表 false |
| byte | 字节型 | 1 | 0 | uint8别名 |
| uint | 整型 | 1 | 0 | 根据操作系统设定数据的值 |
| int8 | 整型 | 1 | 0 | 128 ~ 127 |
| uint8 | 整型 | 1 | 0 | 0 ~ 255 |
| int16 | 整型 | 2 | 0 | -32768 ~ 32767 |
| uint16 | 整型 | 2 | 0 | 0 ~ 65535 |
| int32 | 整型 | 4 | 0 | -2147483648 ~ 2147483647 |
| uint32 | 整型 | 4 | 0 | 0 ~ 4294967295(42亿) |
| int64 | 整型 | 8 | 0 | 9223372036854775808 ~ 9223372036854775807 |
| uint64 | 整型 | 8 | 0 | 0 ~ 18446744073709551615(1844京) |
| float32 | 浮点型 | 4 | 0.0 | 小数位精确到7位 |
| float64 | 浮点型 | 8 | 0.0 | 小数位精确到15位 |
| string | 字符串 | - | : | utf-8字符串 |
- 布尔型
布尔类型也叫做bool类型,bool类型数据只允许取值true或false
bool类型占1个字节
bool类型适用于逻辑运算,一般用于流程控制
- 整型
整型数据分为两类,有符号和无符号两种类型
有符号: int, int8, int16, int32, int64
无符号: uint, uint8, uint16, uint32, uint64, byte
不同位数的整型区别在于能保存整型数字范围的大小
有符号类型可以存储任何整数,无符号类型只能存储自然数
int和uint的大小和系统有关,32位系统表示int32和uint32,如果是64位系统则表示
int64和uint64
- 进制
十进制整数,使用0-9的数字表示且不以0开头
八进制整数,以0开头,0-7的数字表示
十六进制整数,以0X或者是0x开头,0-9|A-F|a-f组成fmt技巧:
多个%要求提供相同数目的操作数,而%后的副词[1]告知Printf重复使用第一个操作数,其次%o,%x或%x之前的副词#告知Printf输出相应的前缀0,0x或0x.
func main() { ascii := 'a' x := 0xdeadbeef fmt.Printf("%d %[1]c %[1]q\n", ascii) fmt.Printf("%d %#x %#X\n", x, x, x) } //97 a 'a' //3735928559 0xdeadbeef 0XDEADBEEF
//输出带有单引号 printf("%q",a) 'a' //输出字符串 printf("%s",a) //输出单个字符 printf("%c",a) //输出无符号十进制数 printf("%u",a) //输出变量类型 fmt.Printf("%T", var_name) //查看变量占用字节浮点型 unsafe.Sizeof(var_name) //%d 按照十进制打印数据 fmt.Printf("%d", a) //%o 按照八进制打印数据 fmt.Printf("%o", b) //%x 按照十六进制打印数据 fmt.Printf("%x", c) fmt.Printf("%X", c) //%b 按照二进制打印数据 fmt.Printf("%b", d)
- 浮点数
浮点数由整数部分 、小数点和小数部分组成,整数部分和小数部分可以隐藏其中一种。也可以使用科学计数法表示,尾数部分可能丢失,造成精度损失。
float64的精度要比float32的要准确//%f 表示输出一个浮点型 默认保留六位小数 会四舍五入 fmt.Printf("%f\n", d) //%.2f 小数点保留2位会对第三位进行四舍五入 fmt.Printf("%.2f\n", e) //科学计数法 f:= 3.14e-5 fmt.Printf("%f\n", f)
- 字符
Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存
字符只能被单引号包裹,不能用双引号,双引号包裹的是字符串
字符使用UTF-8编码,英文字母占一个字符,汉字占三个字符
可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的unicode字符
字符类型是可以运算的,相当于一个整数,因为它们都有对应的unicode码//字符类型 实际为uint8 会按照uint8格式打印 //ASCII码 //0-31 控制字符 使用转移字符表示内容 //32-126 默认字符 48 = '0' 65= 'A' 97='a' //127 Del 字符但是如果我们保存的字符大于255,比如存储汉字,这时byte类型就无法保存,可以使用rune类型保存
一个中文汉字占用3个字符
rune 字符类型 实际为int32 会按照int32格式打印
var ch rune = '中' 支持utf-8中文格式package main import "fmt" func main(){ //字符只能被单引号包裹,不能用双引号,双引号包裹的是字符串 var c1 byte = 'z' var c2 byte = '5' //当我们直接输出type值时,就是输出了对应字符的ASCII码值 fmt.Println(c1,"--",c2) fmt.Printf("c1 = %c c2 = %c ,the result of %d\n",c1,c2,c1-c2) } C:\Users\vSphere\go\src\day00>go run 09.go 122 -- 53 c1 = z c2 = 5 ,the result of 69
- 字符串
字符串就是一串固定长度的字符连接起来的字符序列;
Go的字符串是由单个字节连接起来的;
Go语言的字符串的字节使用UTF-8编码标识Unicode文本;
字符串一旦赋值了,就不能修改了,在Go中字符串是不可变的;字符串的两种标识形式:
双引号,会识别转义字符;
反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源
代码等效果;package main import "fmt" func main(){ var str = "123\nabc" //输出时会换行 fmt.Println(str) } C:\Users\vSphere\go\src\day00>go run 10.go 123 abcpackage main import "fmt" func main(){ var str = `123\nabc`//输出时不会换行 fmt.Println(str) } C:\Users\vSphere\go\src\day00>go run 10.go 123\nabc
字符串拼接方式
package main import "fmt" func main() { var str = "hello " + "world" str += "!" fmt.Println(str) } C:\Users\vSphere\go\src\day00>go run 10.go hello world!当一行字符串太长时,需要使用到多行字符串,可以使用如下处理,需要注意 + 必须在当前行的结尾
package main import "fmt" func main() { var str = "hello " + "world" str += "!" fmt.Println(str) }
3.类型转换
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。
两种不同的类型在计算时,Go语言要求必须进行类型转换。
类型转换用于将一种数据类型的变量转换为另外一种类型的变量。
Go 语言类型转换基本格式如下:数据类型(变量) //将变量转成指定的类型 数据类型(表达式) //将表达式转成指定的类型//类型转换 package main import "fmt" func main(){ //去市场买菜 黄瓜3.25元/斤 买5斤 price := 3.25 weight := 5 fmt.Printf("%T\n",price) fmt.Printf("%T\n",weight) //数据类型变量名 sum := price * float64(weight) fmt.Println(sum) //将浮点型转换成整型,可能丢失数据精度 sum = int(price) * weight fmt.Println(sum) //数据类型 (表达式) sum = int(price * float64(weight)) fmt.Println(sum) } C:\Users\vSphere\AppData\Local\Temp\___go_build_day02.exe #gosetup float64 int 16.25
不通类型可以直接进行计算的场景和不可以进行计算的场景
// 类型转换 package main import "fmt" type int1 int type int2 int func main() { //var a int8 = 123 //var b int =234 //需要进行类型转换 //fmt.Println(a+b) type rune = int32 //两个数据类型可以计算 ch := 'A' //rune == int32 var c int32 = 100 fmt.Println(ch + c) //两个数据类型可以计算 //不可以计算 var a int1 = 123 var b int2 = 234 fmt.Println(a + b) /* # day02 .\0`.go:22:16: invalid operation: a + b (mismatched types int1 and int2) */ }
4.位运算符
& 位运算 AND | 位运算 OR ^ 位运算 XOR &^ 位清空 AND NO << 左移 >> 右移
g
g