基本类型
bool
bool
类型表示一个布尔值,值为 true
或者 false
。示例:
a := true b := false点击复制复制失败已复制
数字类型
有符号整型
类型 | 描述 | 大小 | 范围 |
int8 |
8 位有符号整型 |
8 位 |
[-128, 127] |
int16 |
16 位有符号整型 |
16 位 |
[-32768, 32767] |
int32 |
32 位有符号整型 |
32 位 |
[-2147483648, 2147483647] |
int64 |
64 位有符号整型 |
64 位 |
[-9223372036854775808, 9223372036854775807] |
int |
根据不同的底层平台,表示 32 或 64 位有符号整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。 |
在 32 位系统下是 32 位,而在 64 位系统下是 64 位。 |
在 32 位系统下是[-2147483648, 2147483647], 在 64 位系统下是[-9223372036854775808, 9223372036854775807] |
在 Printf
方法中,使用 %T
格式说明符,可以打印出变量的类型。 Go
的 unsafe
包提供了一个 Sizeof
函数,该函数接收变量并返回它的字节大小。
Tip
unsafe
包应该小心使用,因为使用 unsafe
包可能会带来可移植性问题。
测试示例如下:
package main import ( "fmt" "unsafe" ) func main() { var a int = 89 b := 95 fmt.Println("value of a is", a, "and b is", b) fmt.Printf("type of a is %T, size of a is %d", a, unsafe.Sizeof(a)) // a 的类型和大小 fmt.Printf("\ntype of b is %T, size of b is %d", b, unsafe.Sizeof(b)) // b 的类型和大小 }点击复制复制失败已复制
输出结果为:
value of a is 89 and b is 95 type of a is int, size of a is 8 type of b is int, size of b is 8点击复制复制失败已复制
Tip
因为我的电脑是 64位
的,所以输出的都是8字节,
无符号整型
类型 | 描述 | 大小 | 范围 |
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] |
浮点型
float32
:32位
浮点数float64
:64位
浮点数
浮点数的默认类型是 float64
package main import ( "fmt" ) func main() { a, b := 5.67, 8.97 fmt.Printf("type of a %T b %T\n", a, b) sum := a + b diff := a - b fmt.Println("sum", sum, "diff", diff) no1, no2 := 56, 89 fmt.Println("sum", no1+no2, "diff", no1-no2) }点击复制复制失败已复制
输出结果:
type of a float64 b float64 sum 14.64 diff -3.3000000000000007 sum 145 diff -33点击复制复制失败已复制
复数类型
complex64
:实部和虚部都是float32
类型的的复数。complex128
:实部和虚部都是float64
类型的的复数。
Go
中内建函数 complex 用于创建一个包含实部和虚部的复数。 complex
函数的定义如下:
func complex(r, i FloatType) ComplexType点击复制复制失败已复制
该函数的参数分别是实部和虚部,并返回一个复数类型。实部和虚部应该是相同类型,也就是 float32
或 float64
。如果实部和虚部都是 float32
类型,则函数会返回一个 complex64
类型的复数。如果实部和虚部都是 float64
类型,则函数会返回一个 complex128
类型的复数。
还可以使用简短语法来创建复数:
c := 6 + 7i点击复制复制失败已复制
其他数字类型
byte
是uint8
的别名。rune
是int32
的别名。
关于这两个类型的详细讨论,请转至笔记:Go语言基础——字符串
类型转换
Go
有着非常严格的强类型特征,并且没有自动类型提升或类型转换。所以如下代码会报错
package main import ( "fmt" ) func main() { i := 55 //int j := 67.8 //float64 sum := i + j //不允许 int + float64 fmt.Println(sum) }点击复制复制失败已复制
错误信息为:
main.go:10: invalid operation: i + j (mismatched types int and float64)点击复制复制失败已复制
如果要进行类型转换,需要显示声明类型转换,把 v
转换为 T
类型的语法是 T(v)
。
赋值的情况也是如此。把一个变量赋值给另一个不同类型的变量,需要显式的类型转换,示例如下:
package main import ( "fmt" ) func main() { i := 10 var j float64 = float64(i) // 若没有显式转换,该语句会报错 fmt.Println("j", j) }