本文转载自 https://studygolang.com/articles/11869下面是 Go 支持的基本类型:
bool
- 数字类型
int8
,int16
,int32
,int64
,int
uint8
,uint16
,uint32
,uint64
,uint
float32
,float64
complex64
,complex128
byte
rune
string
有符号整型
类型 | 大小 | 范围 | 描述 |
---|---|---|---|
int8 | 8位 | -128~127 | 表示 8 位有符号整型 |
int16 | 16位 | -32768~32767 | 表示 16 位有符号整型 |
int32 | 32位 | -2147483648~2147483647 | 表示 32 位有符号整型 |
int64 | 64位 | -9223372036854775808~9223372036854775807 | 表示 64 位有符号整型 |
int | 32 | 64位 |
【go语言数据类型】int 根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则应该使用 int 表示整型。无符号整型
大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。
范围:在 32 位系统下是 -2147483648~2147483647,而在 64 位系统是 -9223372036854775808~9223372036854775807。
类型 | 大小 | 范围 | 描述 |
---|---|---|---|
uint8 | 8位 | 0~255 | 表示 8 位无符号整型 |
uint16 | 16位 | 0~65535 | 表示 16 位无符号整型 |
uint32 | 32位 | 0~4294967295 | 表示 32 位无符号整型 |
uint64 | 64位 | 0~18446744073709551615 | 表示 64 位无符号整型 |
uint | 32 | 64位 |
uint 根据不同的底层平台,表示 32 或 64 位无符号整型。浮点型
大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。
范围:在 32 位系统下是 0~4294967295,而在 64 位系统是 0~18446744073709551615。
float32
:32 位浮点数float64
:64 位浮点数复数类型
complex64
:实部和虚部都是 float32 类型的的复数。complex128
:实部和虚部都是 float64 类型的的复数。其他数字类型
byte
是 uint8 的别名。rune
是 int32 的别名。string 类型
string
类型转换 Go 有着非常严格的强类型特征。Go 没有自动类型提升或类型转换。我们通过一个例子说明这意味着什么。
package mainimport (
"fmt"
)func main() {
i := 55//int
j := 67.8//float64
sum := i + j //不允许 int + float64
fmt.Println(sum)
}
上面的代码在 C 语言中是完全合法的,然而在 Go 中,却是行不通的。i 的类型是 int ,而 j 的类型是 float64 ,我们正试图把两个不同类型的数相加,Go 不允许这样的操作。如果运行程序,你会得到
main.go:10: invalid operation: i + j (mismatched types int and float64)
。要修复这个错误,i 和 j 应该是相同的类型。在这里,我们把 j 转换为 int 类型。把 v 转换为 T 类型的语法是 T(v)。
package mainimport (
"fmt"
)func main() {
i := 55//int
j := 67.8//float64
sum := i + int(j) //j is converted to int
fmt.Println(sum)
}
现在,当你运行上面的程序时,会看见输出 122。
赋值的情况也是如此。把一个变量赋值给另一个不同类型的变量,需要显式的类型转换。下面程序说明了这一点。
package mainimport (
"fmt"
)func main() {
i := 10
var j float64 = float64(i) // 若没有显式转换,该语句会报错
fmt.Println("j", j)
}
在第 9 行,i 转换为 float64 类型,接下来赋值给 j。如果不进行类型转换,当你试图把 i 赋值给 j 时,编译器会抛出错误。