5,基础数据类型
前面我们写的程序中,用到的变量的类型都是整型,但是在我们GO语言中,还有很多其它的类型:
类型 | 名称 | 长度 | 零值 | 说明 |
---|---|---|---|---|
bool | 布尔类型 | 1 | false | 其值不为真即为假,不可以用数字代表true或false |
byte | 字节型 | 1 | 0 | uint8别名 |
int,uint | 整型 | - | 0 | 有符号32位或无符号64位 |
int8 | 整型 | 1 | 0 | -128~127 |
uint8 | 整型 | 1 | 0 | 0~255 |
int16 | 整形 | 4 | 0 | -32768-32767 |
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字符串 |
下面我们看一下几个非常重要的类型:
5.1 布尔类型
在计算机中,我们用什么数据类型来表示一句话的对错,例如:在计算机中描述张三(20岁)比李四(18)小,这句话的结果? 布尔类型的变量取值要么是真(true),要么是假(false),用bool关键字来进行定义。示例如下:
package main
import "fmt"
func main(){
//1,声明变量,没有初始化,默认值是false
var a bool
fmt.Println("a0 = ",a)
}
输出如下:
a0 = false
package main
import "fmt"
func main(){
//2,自动推导类型
var b = false
fmt.Println("b = ",b)
c := false
fmt.Println("c = ",c)
}
输出:
b = false
c = false
按照指定格式输出:
package main
import "fmt"
func main(){
var b bool
b = true
fmt.Printf("b=%t",b)
}
输出如下:
b=true
布尔类型主要用于后面讲解的条件判断,关于条件判断,我们在这里先举一个生活中的案例,大家可以理解一下:
5.2 浮点型
package main
import "fmt"
func main(){
//声明变量
var f1 float32
f1 = 3.14
fmt.Println("f1 = ",f1)
}
输出:
f1 = 3.14
package main
import "fmt"
func main(){
//自动推导类型
f2 := 3.14
fmt.Println("f2 = ",f2)
}
输出:
f2 = 3.14
有格式的输入输出:
package main
import "fmt"
func main(){
//声明变量
var f1 float32
fmt.Printf("请输入数值")
fmt.Scanf("%f",&f1)
fmt.Printf("f1=%f",f1)
}
输出:
请输入数值 1.1
f1=1.100000
5.3字符类型
5.3.1 字符基本输入输出
package main
import "fmt"
func main(){
//声明变量
var ch byte //声明字符类型
ch = 'a' //单引号,字符
fmt.Printf("%c",ch)
}
输出:
a
输入一个字符,如下:
package main
import "fmt"
func main(){
//声明变量
var ch byte //声明字符类型
fmt.Println("请输入字符")
fmt.Scanf("%c",&ch)
fmt.Printf("%c",ch)
5.3.2 字符第二种输入与输出类型
package main
import "fmt"
func main(){
//声明变量
var ch byte //声明字符类型
ch = 97
fmt.Printf("ch=%c",ch)
}
输出:
a # 97对应的是字符a
这里定义了,ch是一个字符类型,赋值却是一个整数97,打印的结果是小写字符’a’.
原因是:计算机不能直接存储字符类型,只能转成数字存储,但是为什么小写字符‘a’,对应的整数是97呢?因为,计算机是根据’ASCII’码来存储。(这里只是简单介绍ASCII)
注意:输出fmt.Printf("ch=%c",ch)必须为c%,如果为d%,还是整数
5.3.3 转义字符
字符除了我们常见的字符'a'',字符'b'等等以外,还有一些特殊的字符,例如我们讲解的'\n'', 它的作用是什么?换行,不会在屏幕上输出具体的内容。这种字符我们称为转义字符(具有特殊含义),那么除了'\n'字符以外,还有哪些是我们以后编程中经常用到的转义字符呢?
5.3.3.1 \
\":表示一个英文半角的双引号,转义字符
package main
import "fmt"
func main(){
fmt.Printf("学习\"区块链\"技术")
}
输出:
学习"区块链"技术
5.3.3.2 \t
\t:表示一个tab键的空格(可以用来对输出的内容进行排版)
package main
import "fmt"
func main(){
fmt.Printf("张三\t 李四\t 王五\t")
}
输出:
张三 李四 王五
5.3.3.3 \
\\:表示一个\(主要用在表示磁盘目录上,后面我们讲解文件操作时,经验要根据磁盘目录获取文件然后进行读取,写入等操作)
对 \进行转义
package main
import "fmt"
func main(){
fmt.Printf("C:\\Users\\Admin\\go\\study")
}
输出:
C:\Users\Admin\go\study
5.4
用单引号括起来的单个字符是字符类型,用双引号括起来的字符是字符串类型。“a”是字符还是字符串呢? 下面是关于字符串的定义使用:
package main
import "fmt"
func main(){
var str1 string //声明变量
str1 = "abc"
fmt.Println("str1 =",str1)
fmt.Printf("str1=%s",str1)
}
输出:
str1 = abc
str1=abc
5.5 字符与字符串的区别
%s:字符串
%c:字符
%d:整数
package main
import "fmt"
func main(){
var ch byte
var str string
//字符
//1、单引号
//2,字符,往往都只有一个字符,转义字符除外’\n‘
ch = 'a'
fmt.Println("ch =",ch)
//字符串
//1,双引号
//2,字符串由一个或多个字符组成
//3,字符串都是隐藏了一个结束符,'\o'
str = "a" //由'a'和'\0'组成一个字符串
fmt.Println("str =",str)
str = "hello" //测试字符串有多少个字符组成
fmt.Println("str长度是",len(str))
//只想字符串的某个字符,从0开始操作
fmt.Printf("str[0] = %c,str[1] = %c\n",str[0],str[1])
}
输出:
ch = 97
str = a
str长度是 5
str[0] = h,str[1] = e
5.6 fmt输入输出
我们前面在输出与输入字符串类型,字符类型,整型等都指定了对应的格式化,那么go语言中还有哪些格式化呢?
格式 | 含义 |
---|---|
%% | 一个%字面量 |
%b | 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 |
%c | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%d | 一个十进制数值(基数为10) |
%o | 一个以八进制表示的数字(基数为8) |
%p | 以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示 |
%q | 使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字 |
%s | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) |
%t | row 2 col 2 |
%T | 使用Go语法输出的值的类型 |
%x | 以十六进制表示的整型值(基数为十六),数字a-f使用小写表示 |
%X | 以十六进制表示的整型值(基数为十六),数字A-F使用小写表示 |
%T,作用是输出值的类型,示例如下:
package main
import "fmt"
func main(){
var b bool
b = true
fmt.Printf("b变量的类型是%T",b)
}
输出:
b变量的类型是bool