ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 基本类型介绍 | 类型 | 长度(字节) | 默认值 | 说明 | | --- | --- | --- | --- | | bool | 1 | false | | | byte | 1 | 0 | uint8 | | rune | 4 | 0 | Unicode Code Point, int32 | | int, uint | 4或8 | 0 | 32 或 64 位 | | int8, uint8 | 1 | 0 | \-128 ~ 127, 0 ~ 255,byte是uint8 的别名 | | int16, uint16 | 2 | 0 | \-32768 ~ 32767, 0 ~ 65535 | | int32, uint32 | 4 | 0 | \-21亿~ 21亿, 0 ~ 42亿,rune是int32 的别名 | | int64, uint64 | 8 | 0 | | | float32 | 4 | 0.0 | | | float64 | 8 | 0.0 | | | complex64 | 8 | | | | complex128 | 16 | | | | uintptr | 4或8 | | 以存储指针的 uint32 或 uint64 整数 | | array | | | 值类型 | | struct | | | 值类型 | | string | | "" | UTF-8 字符串 | | slice | | nil | 引用类型 | | map | | nil | 引用类型 | | channel | | nil | 引用类型 | | interface | | nil | 接口 | | function | | nil | 函数 | <br> ## 1.内置类型 ### 1.1值类型: ~~~ bool int(32 or 64), int8, int16, int32, int64 uint(32 or 64), uint8(byte), uint16, uint32, uint64 float32, float64 string complex64, complex128 array -- 固定长度的数组 ~~~ ### 1.2引用类型:(指针类型) ~~~ slice -- 序列数组(最常用) map -- 映射 chan -- 管道 ~~~ ## 2.基本类型 ``` * bool * 数字类型 int8, int16, int32, int64, int uint8, uint16, uint32, uint64, uint float32, float64 complex64, complex128 byte rune * string ``` ### 2.1有符号整型 ``` int8:表示 8 位有符号整型 大小:8 位 范围:-128~127 int16:表示 16 位有符号整型 大小:16 位 范围:-32768~32767 int32:表示 32 位有符号整型 大小:32 位 范围:-2147483648~2147483647 int64:表示 64 位有符号整型 大小:64 位 范围:-9223372036854775808~9223372036854775807 ``` *int:根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。 大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。 范围:在 32 位系统下是 -2147483648~2147483647,而在 64 位系统是 -9223372036854775808~9223372036854775807* ### 2.2无符号整型 ``` uint8:表示 8 位无符号整型 大小:8 位 范围:0~255 uint16:表示 16 位无符号整型 大小:16 位 范围:0~65535 uint32:表示 32 位无符号整型 大小:32 位 范围:0~4294967295 uint64:表示 64 位无符号整型 大小:64 位 范围:0~18446744073709551615 ``` *uint:根据不同的底层平台,表示 32 或 64 位无符号整型。 大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。 范围:在 32 位系统下是 0~4294967295,而在 64 位系统是 0~18446744073709551615。* ### 2.3浮点型 ``` float32:32 位浮点数 float64:64 位浮点数 ``` ### 2.4复数类型 ``` complex64:实部和虚部都是 float32 类型的的复数 complex128:实部和虚部都是 float64 类型的的复数 ``` ## 2.5 布尔类型 Go语言中以`bool`类型进行声明布尔型数据,布尔型数据只有`true(真)`和`false(假)`两个值 ``` 布尔类型变量的默认值为false Go 语言中不允许将整型强制转换为布尔型. 布尔型无法参与数值运算,也无法与其他类型进行转换 ``` ### 2.6字符串 Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型`(int、bool、float32、float64 等)`一样。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(")中的内容,可以在Go语言的源码中直接添加非`ASCII`码字符,例如: ~~~ s1 := "hello" s2 := "你好" ~~~ ### 2.7其他数字类型 ``` byte 是 uint8 的别名 rune 是 int32 的别名 ``` ## 3.类型转化 Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。 强制类型转换的基本语法如下: ~~~ T(表达式) ~~~ 其中,T表示要转换的类型。表达式包括变量、复杂算子和函数返回值等. 比如计算直角三角形的斜边长时使用math包的Sqrt()函数,该函数接收的是float64类型的参数,而变量a和b都是int类型的,这个时候就需要将a和b强制类型转换为float64类型。 ~~~ func sqrtDemo() { var a, b = 3, 4 var c int // math.Sqrt()接收的参数是float64类型,需要强制转换 c = int(math.Sqrt(float64(a*a + b*b))) fmt.Println(c) } ~~~ ## 4.自定义类型 type IntConvertionFn func(n int) int type MyPoint int ***** 【知识点】 * GO语言不允许隐式类型转换 * 别名和原有类型也不能进行隐式类型转换