go语言数据类型

本文转载自 https://studygolang.com/articles/11869
下面是 Go 支持的基本类型:
  1. bool
  2. 数字类型
    • int8, int16, int32, int64, int
    • uint8, uint16, uint32, uint64, uint
    • float32, float64
    • complex64, complex128
    • byte
    • rune
  3. string
bool bool 类型表示一个布尔值,值为 true 或者 false。
有符号整型
类型 大小 范围 描述
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 时,编译器会抛出错误。

    推荐阅读