Go语言基础数据类型
数据类型的转换与运算
数据类型是一门高级语言的基础,Go属于又属于强类型静态编译语言。Go语言拥有两大数据类型,基本数据类型和复合数据类型。


整型
| 数据类型 | 说明 | 取值范围 |
|---|---|---|
| 有符号整数 | ||
| int8 | 有符号 8位整数 | -128到 127 |
| int16 | 有符号 16位整数 | -32768 到32767 |
| int32 | 有符号 32位整数 | -2147483648到2147483647 |
| int64 | 有符号 64位整数 | -9223372036854775808到9223372036854775807 |
| 无符号整数 | ||
| uint8 | 无符号8位整数 | 0到255 |
| uint16 | 无符号16位整数 | 0到65535 |
| uint32 | 无符号32位整数 | 0到4294967295 |
| uint64 | 无符号64位整数 | 0到18446744073709551615 |

- int后面的8, 代表转成二进制的长度。 8个0/1码。
- uint8 最小的值转为二进制是00000000八个零, 再转为十进制最小应该是0。最大的值转为二进制是11111111八个一 ,再转为十进制应该是255。
- 有符号: 带符号的表示转为数值后,最高位表示符号位 ,0 表示正数, 1表示负数 ,剩余的位才表示数值。
- 无符号: 无符号 没有正负之分 所有的位都表示数值。
Go语言中int类型的大小与具体的平台有关系,一般来说,int在32位系统中是4字节,在64位系统中是8字节,使用简短定义自动推导类型初始化一个整数,默认为int类型。 关于int类型的取值范围,如果要把一个大的数字,放进小的数据类型则会放不进去。

var n int8n=100fmt.Println(n) //100 没有问题//如果赋值为200 则不行 因为int8取值范围最大是127var i2 uint8i2=200fmt.Println(i2) //200 uint8 取值范围最大是0到255
在Go语言中 byte与uint8 是一样的,rune与int32是一样的,代表同一种数据类型。但是int和int64 不是同一种类型。

//byte uint8 的别称//rune int32 的别称var i3 uint8i3= 100var i4 bytei4=i3fmt.Println(i3,i4) //100,100
字符串
字符串的概念就是多个byte的集合,一个字符序列用双引号””,或者`` (esc下面的键) 表示。

s1 := "ABC"fmt.Printf("s1的类型是%T,值为%s\n", s1, s1) //string ,ABCv1 := 'A'v2 := "A"fmt.Printf("v1的类型是%T,%d\n", v1, v1) // int32 65fmt.Printf("v2的类型是%T,%s\n", v2, v2) //string A//单引号存储的是 ASCII编码//A的ASCII值=65//B的ASCII值B=66//a的ASCII值a=97v3 := '中'fmt.Printf("%T,%d,%c,%q\n", v3, v3, v3, v3) //int32 20013 中 ‘中’//定义字符串s3 := "hello 漫画go语言"s2 := `hello go`fmt.Printf(s3) //hello 漫画go语言fmt.Printf(s2) //hello go//字符串的长度//中文占3个字节fmt.Println(len(s3)) //20fmt.Println(len(s2)) //8//获取某个字节fmt.Println(s2[0]) //104
字符转义
双引号单引号如果作为字符串输出,需要使用\"进行转义后才能使用 \n \r \t 为特殊作用字符。
//字符转义空格fmt.Println("hello \t golang")//hello golang//输出换行fmt.Println("hello \n golang")//hello// golang//回车符号fmt.Println("hello \r golang")//hello// golang//输出路径fmt.Println("E:\\golang\\go.jpg")//E:\golang\go.jpg//双引号fmt.Println("hello \"golang\"")//hello "golang"
布尔
一个布尔类型的值只有两种结果,true或者false 非真即假。往往使用在条件判断的时候。

//布尔类型作为条件比较返回结果只有true和false两种a:=10fmt.Println(a==2) //falsefmt.Println(a!=2) //true
浮点型
Go语言有两种精度的浮点数 float32 和 float64。浮点类型的数据取值范围可以从很小或者很巨大。
| 单精度 浮点类型 | 取值范围 | |
|---|---|---|
| float32 | 负数时 | -3.402823E38 到 -1.401298E-45 |
| float32 | 正数时 | 1.401298E-45 到 3.402823E38 |
| 双精度 浮点类型 | 取值范围 |
|---|---|
| float64 | -1.79E+308 到 +1.79E+308 |
1.79E-308 是 1.79 乘以 10的负308次方。 1.79E+308 是 1.79 乘以 10的308次方。
单精度双精度两者区别
在内存中占有的字节数不同
- 单精度浮点数在机内占4个字节。
- 双精度浮点数在机内占8个字节。
有效数字位数不同
- 单精度浮点数 有效数字7位。
- 双精度浮点数 有效数字16位。
使用情况区别
- 一般用来表示美元和分的时候用单精度类型。
- 超出人类经验的数字函数,例如 sin() cos() tan() sqrt() 都使用双精度值。
数据类型的转换
go 语言是静态语言,要求,定义、赋值、 运算、类型一致才能进行操作。所以要进行操作的时候必须保证数据类型一致。需要注意的是,只有兼容的数据类型才能够转换。 强制类型转换的语法 Type(value)
var a int8 = 10var b int16//b=a 因为类型不同不能直接转换b= int16(a)fmt.Println(a,b)//10,10f1:=3.12var c intc = int(f1)fmt.Println(f1,c)// 3.12 , 3 浮点类型转为整形的时候 只是取了整数部分//不是所有类型都能互相转换//数值类型的可以转换 int 和bool 不能转换
运算符
算数运算符 程序在运行过程中执行数学运算时候需要算数运算符。

| 运算符 | 描述 | 说明 |
|---|---|---|
| + | 表示相加 | 5+2 =7 |
| - | 相减 | 5-2 =3 |
| * | 相乘 | 5*2 =10 |
| / | 相除 取商 | 5/3 = 1 |
| % | 相除 取余数 | 5%3= 2 |
| ++ | 自身加1 | 5++ =6 |
| -- | 自身减1 | 5— =4 |
关系运算符 关系运算符的结果是bool类型的

| 运算符 | 描述 | 说明 |
|---|---|---|
| == | 比较相等 | 10==10 结果 true |
| != | 比较不等 | 10 !=10 结果 false |
| 是否大于 | 100>1 结果 true | |
| < | 是否小于 | 100<1 结果 false |
| >= | 大于等于 | 100>=100 结果 true |
| <= | 小于等于 | 100>=101 结果 false |
逻辑运算符
| 标识符 | 描述 | 说明 |
|---|---|---|
| && | 逻辑与 | 操作数都为真才为真 有一个为假就为假(一假则假,全真为真) |
| II | 逻辑或 | 操作数有一个为真就为真(一真为真,全假为假) |
| ! | 逻辑非 | 相反方向则为真(假为真 真为假) |
位运算符

var a int8 = 12var b int8 = 15fmt.Printf("%b,%b \n", a, b)//0000 1100 a 的二进制//0000 1111 b 的二进制//0000 1100 按位与 & --转为10进制 结果 12//0000 1111 按位或 | --转为10进制 结果 15//0000 0011 按位异或 ^ --转为10进制 结果 3//0000 0000 按位清空 &^ --转为10进制 结果 0//<< 按位左移 a << b 将a转为二进制 向左移动b个位//>> 按位右移 a >> b 将a转为二进制 向右移动b个位aes := a << 2//0011 0000 a向左位移2位结果fmt.Printf("%b\n", aes)aes2 := a >> 2//0000 0011 a向右位移2位结果fmt.Printf("%b\n", aes2)
赋值运算符
| 运算符 | 描述 |
|---|---|
| \= | 把等号右侧的数值 赋给左边的变量 |
| += | 自身加上后面的值 再赋给左边的变量 |
| -= | 自身减去后面的值 在赋给左边 |
| /= | 自身除后面的值 再赋值给左边 |
| %= | 自身与后面的值求余数后 再赋值给左边 |
| <<= | 左移后再赋值 |
| >>= | 右移后再赋值 |
| &= | 按位与后再赋值 |
| I= | 按位或 后再赋值 |
| ^= | 按位异或后再赋值 |
占位符号
占位符表示在程序中输出一行字符串时候,或者格式化输出字符串的时候使用。go内置包fmt中Printf方法可以在控制台格式化打印出用户输入的内容。fmt.Printf(“%T”,x)

| 占位符 | 说明 | 举例 | 输出 | ||||
|---|---|---|---|---|---|---|---|
| %d | 十进制的数字 | fmt.Printf(“%d”,10) | 10 | %b | 二进制的数字 | fmt.Printf(“%b”,5) | 101 |
| %T | 取类型 | b :=true fmt.Printf(“%T”,b) | bool | ||||
| %s | 取字符串 | s :=”123” fmt.Printf(“%s”,s) | 123 | ||||
| %t | 取bool类型的值 | b:=true fmt.Printf(“%t”,b) | true | ||||
| %p | 取内存地址 | p :=”123” fmt.Printf(“%p”, &p) | 0xc0000461f0 |
