一、 整型
类型 | 有无符号 | 长度 | 取值范围 |
int8 | 有 | 1个字节(8bit) | -128 ~127 |
int16 | 有 | 2个字节(16bit) | -32768 ~ 32767 |
int32 | 有 | 4个字节(32bit) | -2147483648 ~ 2147483647 |
int64 | 有 | 8个字节(64bit) | -9223372036854775808 ~ 9223372036854775807 |
int | 有 | | 32位操作系统上就是int32,64位操作系统上就是int64 |
| |||
uint8 | 无 | 1个字节(8bit) | 0 ~ 255 |
uint16 | 无 | 2个字节(16bit) | 0 ~ 65535 |
uint32 | 无 | 4个字节(32bit) | 0 ~ 4294967295 |
uint64 | 无 | 8个字节(64bit) | 0 ~ 18446744073709551615 |
uint | 无 | | 32位操作系统上就是int32,64位操作系统上就是int64 |
GO在默认情况下使用的是有符号int型
建议:在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int和 uint。
二、布尔类型
Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true和false两个值。
- 布尔类型变量的默认值为false。
- Go 语言中不允许将整型强制转换为布尔型.
- 布尔型无法参与数值运算,也无法与其他类型进行转换。
类型 | 长度 | 取值范围 |
bool | 1个字节(8bit) | true 或者 false |
三、浮点型
Go语言支持两种浮点型数:float32和float64;数位越高浮点数的精度越高
float32: 占4字节32bit
- math.MaxFloat32 表示 float32 能取到的最大数值,大约是 3.4e38
- 最小值为:1.4e-45
float64:占8字节64bit,float64占用的内存是float32的两倍
- math.MaxFloat64 表示 float64 能取到的最大数值,大约是 1.8e308;
- 最小值为:4.9e-324
Go 语言默认情况下使用的是 float64
四、byte和rune
1、byte 实际就是 uint8。
2、rune 实际就是 int32。
Go 语言的字符有以下两种:
- uint8类型,或者叫 byte 型,代表了ASCII码的一个字符,处理英文很方便
- rune类型,代表一个 UTF-8字符 ,处理Unicode 字符集很方便,Go采用的是UTF-8编码格式
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "hello中国"
fmt.Printf("s 数据类型=%T ,ASCII 字符个数=%v , Uncode 字符数量=%v ", s, len(s), utf8.RuneCountInString(s))
fmt.Println()
for i := 0; i < len(s); i++ { //byte
fmt.Printf("%v(%c) ", s[i], s[i])
}
fmt.Println()
for _, r := range s { //rune
fmt.Printf("%v(%c) ", r, r)
}
fmt.Println()
}
因为UTF8编码下一个中文汉字由3个字节组成,所以不能按照字节去遍历一个包含中文的字符串,否则就会出现上面输出乱码
五、字符串
Go语言里的字符串的内部采用的是Unicode字符集的UTF-8编码,字符串的值为双引号""中的内容;
Go中字符串是一个字节切片,所以我们可以获取字符串的每一个字节。
string 常用的方法
- utf8 package("unicode/utf8") 包中的 func RuneCountInString(s string) (n int) 方法用来获取字符串中字符的长度
- len(str) 求字节长度
- +或fmt.Sprintf 拼接字符串
- strings.Split 分割
- strings.contains 判断是否包含
- strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
- strings.Index(),strings.LastIndex() 子串出现的位置
- strings.Join(a[]string, sep string) join操作
六、复数类型
complex64: 实部和虚部都是 float32 类型的的复数。
complex128:实部和虚部都是 float64 类型的的复数。
七、类型转换
Go不像JAVA,C++有自动类型提升和自动类型转换,他有着非常严格的强类型特征, 没有自动类型转换和自动类型提升
num1 和 num2 应该是相同的类型,需要我们显示的做类型转换;语法: 把 v 转换为 T 类型 T(v)