今天我们继续来看看,go语言中的基础数据类型
废话不多说,整!
类型 | 名称 | 长度 | 零值 | 说明 |
bool | 布尔类型 | 1 | false | 其值不为真即为假,不可以用数字代表true或false |
byte | 字节型 | 1 | 0 | uint8别名 |
rune | 字符类型 | 4 | 0 | 专用于存储unicode编码,等价于uint32 |
int, uint | 整型 | 4或8 | 0 | 有符号32位或无符号64位 |
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 | 0 到 18446744073709551615(1844京) |
uint64 | 整型 | 8 | 0 | -9223372036854775808到 9223372036854775807 |
float32 | 浮点型 | 4 | 0.0 | 小数位精确到7位 |
float64 | 浮点型 | 8 | 0.0 | 小数位精确到15位 |
complex64 | 复数类型 | 8 |
|
|
complex128 | 复数类型 | 16 |
| 64 位实数和虚数 |
uintptr | 整型 | 4或8 |
| ⾜以存储指针的uint32或uint64整数 |
string | 字符串 |
| "" | utf-8字符串 |
一、布尔类型
计算机中,经常用布尔类型来判断对与错,布尔类型的变量取值,要么为真(True)要么为假(False)
用bool关键字来进行定义,看下面的代码
package main
import "fmt"
func main() {
//bool 类型
var a bool
fmt.Println(a)
}
运行结果:
false
可以看到,我们在定义一个布尔类型以后,没有做任何赋值操作,直接打印结果,会发现,布尔类型的默认值为false
做赋值操作:
package main
import "fmt"
func main() {
//bool 类型
var a bool
fmt.Println(a)
a = true
fmt.Println(a)
b:= true
fmt.Println(b)
}
运行结果:
false
true
true
定义布尔值类型a,不做赋值操作,打印默认值为false
将true赋值给a,打印a的值为true
定义默认推导类型true 值,给b
打印b的值,为true
一般bool 字段常用于条件判断中
二、浮点型(小数类型)
Go语言中支持两种类型的小数:
float32和float64
- float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32。小数位精确到7位
- float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64。小数位精确到15位
我们看下面的代码:
package main
import "fmt"
func main() {
//声明浮点型变量
var a float32 //float32 7位小数
a = 3.14
fmt.Println("a=", a)
var b float64 //float63 15位小数
b = 3.33333333333
fmt.Println("b=", b)
}
输出结果
a= 3.14
b= 3.33333333333
使用自动推导类型定义浮点型变量,默认使用float64
//自动推导类型定义
a1 := 3.14
b1 := 3.333333333333
fmt.Println("a1", a1)
fmt.Println(reflect.TypeOf(a1))
fmt.Println("b1", b1)
fmt.Println(reflect.TypeOf(b1))
输出结果
a1 3.14
float64
b1 3.333333333333
float64
我们在给变量赋值的时候,必须要将类型转换一致,才可以进行赋值。float32 和float64虽然都是浮点类型,但是他们两者是不同数据类型。float64类型,给float32赋值的时候,一定要先将float64类型的数据,强制转换为float32类型。
三、字符类型
(1)字符基本输入与输出
go语言中没有专门的字符类型,存储字符直接使用byts来存储,所谓字符类型是用单引号括起来的单个字符,关于字符的定义使用如下:
package main
import "fmt"
func main() {
//声明字符变量
var a byte //声明一个字符类型
a = 'a' //单引号,字符
fmt.Printf("%c", a)
}
输出结果:
a
第二种:
package main
import "fmt"
func main() {
var a byte //声明字符类型
a = 97 //97赋值给a
fmt.Printf("a=%c", a)
}
输出结果
a=a
这里我们可以看到,我们定义了字符型变量a,赋值给a的是整数97,打印的结果,却是小写字符‘a’
因为:计算机不能直接存储字符类型,只能转成数字存储,可以通过ASCII表,来查询,a对应的整数值,为97,计算机是根据‘ASCII’码来存储。
注意:
package main
import "fmt"
func main() {
var a byte //声明字符类型
a = 97 //97赋值给a
fmt.Println("a=", a)
fmt.Printf("a=%c", a) //这里需要注意,如果我们要输出字符a,那么必须制定%c,否则会输出整数
}
输出结果
a= 97
a=a
(2)转义字符:
字符除了我们常见的的字符,'a','b','c'等等以外,还有一些特殊的字符,比如'\n',它的作用是什么?换行,不在控制台输出具体的内容,这种字符我们通常称之为转移字符, 是具有特出含义的字符。
\" :表示一个英文半角的双引号,如下代码:
package main
import "fmt"
func main() {
fmt.Printf("go语言\"牛皮\",厉害")
}
输出结果:
go语言"牛皮",厉害
\t :表示一个tab键的空格(可以用来对输出的内容进行排版)
package main
import "fmt"
func main() {
fmt.Println("1,\t2,\t3,\t4")
fmt.Println("5,\t6,\t6,\t7")
}
输出结果:
1, 2, 3, 4
5, 6, 6, 7
\\ :表示一个\(主要用在表示磁盘目录上,后面我们讲解文件操作时,经验要根据磁盘目录获取文件然后进行读取,写入等操作)
package main
import "fmt"
func main() {
fmt.Printf("E:\\D\\Go语言")
}
输出结果
E:\D\Go语言
以上转移字符只是以后开发过程中我们会经常用到的,还有一些,这里就不一一举例,有兴趣的朋友们,可以下去研究一下。
四、字符串类型
字符串就是一串固定长度的字符连接起来字符序列。
用单引号括起来的单个字符是字符类型,用双引号括起来的字符是字符串类型。“a”是字符还是字符串呢?
package main
import "fmt"
func main() {
var str1 string //声明一个字符串类型变量
str1 = "abc"
fmt.Println("str1=",str1)
fmt.Printf("str1=%s",str1) //%s, 指定输出字符串格式
}
输出结果
str1= abc
str1=abc
字符与字符串的区别:
package main
import "fmt"
func main() {
var a byte
var str string
//字符
//1、单引号
//2、字符,一般字符类型,都只有一个字符,转义字符除外'\n'等
a = 'a'
fmt.Println("a = ",a)
//字符串
//1、双引号
//2、字符串有1个或多个字符组成
//3、字符串都是隐藏了一个结束符,'\0'
str = "a" //是由'a'和'\0'组成了一个字符串
fmt.Println("str = ", str)
}
输出结果:
a = 97
str = a
五、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使用小写表示 |
红色标注,是经常用到的一些输出格式,需要掌握。
这次就先讲到这里,下次继续。