1.4. 第 4 节:基础数据类型
4:基础数据类型
类型 | 名称 | 长度(字节) | 零值 | 说明 |
---|---|---|---|---|
bool | 布尔类型 | 1 | false | 其值不为真即为假,不可以用数字代表true或false |
byte | 字节型 | 1 | 0 | uint8别名 |
int, uint | 整型 | 4或8 | 0 | 有符号32位或无符号64位(与CPU位数有关) |
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到 92233720368547758070 |
uint64 | 整型 | 8 | 0 | 到 18446744073709551615(1844京) |
float32 | 浮点型 | 4 | 0.0 | 小数位精确到7位 |
float64 | 浮点型 | 8 | 0.0 | 小数位精确到15位 |
string | 字符串 | "" | utf-8字符串 |
下面我们看一下几个非常重要的类型,其它类型随着课程的深入,后面会给大家讲解到
1:布尔类型
在计算机中,我们用什么数据类型来表示一句话的对错,例如:在计算机中描述张三(20岁)比李四(18)小,这句话的结果?
布尔类型的变量取值要么是真(true),要么是假(false),用bool关键字来进行定义。示例如下:
package main
// 09
import "fmt"
func main() {
//布尔类型 值为true 或者为 false
//var a bool //默认值为false
////bool类型一般用于条件判断
//a = true
//fmt.Println(a)
//自动推到类型创建bool类型变量
a := false //bool
//a=true
//fmt.Println(a)
//%T是一个占位符 表示输出一个变量对应的数据类型
fmt.Printf("%T\n", a)
b := 10 //int
fmt.Printf("%T\n", b)
c := 3.14 //float64
fmt.Printf("%T\n", c)
d := "你个锤子"//string
fmt.Printf("%T", d)
}
布尔类型主要用于后面讲解的条件判断,关于条件判断,我们在这里先举一个生活中的案例,大家可以理解一下:
2:浮点型
package main
import "fmt"
func main0101() {
//浮点型数据 分为 单精度浮点型 float32(小数位数为7位) 双精度浮点型 float64(小数位数为15位)
//float64 比 float32 更精准
//var a float64=1223.456
////保留六位小数数据会更精准
//fmt.Printf("%f\n",a)
//var a float32 =3.14
//
//fmt.Printf("%.2f",a)
//通过自动推到类型创建的浮点型变量 默认类型为float64
a := 123.456
fmt.Printf("%T\n", a)
}
//买黄瓜 3.2一斤 买3斤
func main() {
price := 3.2
var weight float64
fmt.Scan(&weight)
sum := price * weight
//fmt.Println(sum)
fmt.Printf("%.2f",sum)
}
3:字符类型
package main
import "fmt"
func main0201() {
//byte字符类型 同时也是uint8的别名
var a byte = 'a'
//所有的字符都对应ASCII中的整型数据
//'0'对应的48 'A'对应的65 'a' 对应的97
//fmt.Println(a)
//%c是一个占位符 表示打印输出一个字符
fmt.Printf("%c\n", a)
fmt.Printf("%c\n", 97)
fmt.Printf("%T\n", a)
var b byte = '0' //字符0 对应的ASCII值为为48
fmt.Printf("%c\n", 48)
fmt.Printf("%c\n", b)
}
func main0202() {
var a byte = 'a'
//将小写字母转成大写字母输出
fmt.Printf("%c", a-32)
}
func main() {
//转义字符 \n 换行
//var a byte = '\n'
//\0 对应的ASCII 值为0 用于字符串的结束标志
//\t 对应的ASCII 值为9 水平制表符 一次跳八个空格
var a byte ='\t'
//fmt.Println(a)
fmt.Printf("%c",a)
}
4:字符串类型
package main
import "fmt"
func main0301() {
//var a string = "你好"
////fmt.Println(a)
//fmt.Printf("%s",a)
//a:="你好"
//fmt.Println(a)
//fmt.Printf("%s",a)
//双引号引起来的称为字符串
ch := 'a'
str := "a" //'a''\0'字符串结束标志
fmt.Printf("%c\n", ch)
//%s打印字符串打印到\0之前的内容
fmt.Printf("%s\n", str)
}
func main0302() {
// 字符与字符串区别
//len 函数 用来计算字符串中字符个数 不包含\0 返回值为int类型
//a := "hello"
//在go语言中一个汉字占3个字符 为了和linux进行统一处理
a := "bokedu"
var count int
count = len(a)
fmt.Println(count)
}
func main() {
str1 := "澳门在线赌场上线了"
str2 := "性感荷官在线发牌"
//字符串连接 +
str3 := str1 + str2
fmt.Println(str3)
}
5:字符与字符串区别
上面的代码中已经实现
6:fmt包的格式化输出输入
我们前面在输出与输入字符串类型,字符类型,整型等都指定了对应的格式化,那么go语言中还有哪些格式化呢?
格式 | 含义 |
---|---|
%% | 一个%字面量 |
%b | 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 |
%c | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%d | 一个十进制数值(基数为10) |
%e | 以科学记数法e表示的浮点数或者复数值 |
%E | 以科学记数法E表示的浮点数或者复数值 |
%f | 以标准记数法表示的浮点数或者复数值 |
%g | 以%e或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 |
%G | 以%E或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 |
%o | 一个以八进制表示的数字(基数为8) |
%p | 以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示 |
%q | 使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字 |
%s | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) |
%t | 以true或者false输出的布尔值 |
%T | 使用Go语法输出的值的类型 |
%U | 一个用Unicode表示法表示的整型码点,默认值为4个数字字符 |
%v | 使用默认格式输出的内置或者自定义类型的值,或者是使用其类型的String()方式输出的自定义值,如果该方法存在的话 |
%x | 以十六进制表示的整型值(基数为十六),数字a-f使用小写表示 |
%X | 以十六进制表示的整型值(基数为十六),数字A-F使用小写表示 |
%% | 一个%字面量 |
%b | 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 |
%c | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%d | 一个十进制数值(基数为10) |
%e | 以科学记数法e表示的浮点数或者复数值 |
%E | 以科学记数法E表示的浮点数或者复数值 |
%f | 以标准记数法表示的浮点数或者复数值 |
%g | 以%e或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 |
%G | 以%E或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 |
%o | 一个以八进制表示的数字(基数为8) |
%p | 以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示 |
%q | 使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字 |
%s | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) |
%t | 以true或者false输出的布尔值 |
%T | 使用Go语法输出的值的类型 |
%U | 一个用Unicode表示法表示的整型码点,默认值为4个数字字符 |
%v | 使用默认格式输出的内置或者自定义类型的值,或者是使用其类型的String()方式输出的自定义值,如果该方法存在的话 |
%x | 以十六进制表示的整型值(基数为十六),数字a-f使用小写表示 |
%X | 以十六进制表示的整型值(基数为十六),数字A-F使用小写表示 |
package main
import "fmt"
func main0401() {
//fmt.Printf("35%%")
//十进制整型数据
a := 123
//%b 占位符 打印一个数据的二进制格式
fmt.Printf("%b\n", a)
//%o 占位符 打印一个数据的二进制格式
fmt.Printf("%o\n", a)
//%x %X 占位符 十六进制
//10-15用a-f表示 %x a-f %X A-F
fmt.Printf("%x\n", a)
fmt.Printf("%X\n", a)
//十进制
fmt.Println(a)
fmt.Printf("%d\n", a)
}
func main0402() {
//十进制数据
var a int = 10
//八进制数据 八进制数据是以0开头 最大值为7
var b int = 010
//十六进制数据 十六进制数据是以0x开头
//10-15用a-f表示 %x a-f %X A-F
var c int = 0xABC
//二进制 不能在go语言中直接表示
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
func main() {
//''引起来的智能存储一个字符
ch := 'a' //'\n'
str := "瓜娃子"
fmt.Printf("%c\n", ch)
fmt.Printf("%s\n", str)
fmt.Println(ch)
//%p 占位符 打印是一个变量对应的内存地址 是以无符号十六进制整型表示
fmt.Printf("%p\n", &ch)
fmt.Printf("%p\n", &str)
a := false
//%t占位符 打印bool类型的值
fmt.Printf("%t\n",a)
fmt.Println(a)
}