数据类型主要用于声明变量和函数。Go 语言中有丰富的数据类型,除了整型、浮点型、布尔型和字符串基本类型,还有数组、切片、结构体、函数、map、channel等派生类型。
本章将介绍基本数据类型
bool 类型表示布尔值,并且为true或false。
序号 | 类型 | 大小 | 范围 |
---|---|---|---|
1 | int8 | 8 位整型 | -128 到 127 |
2 | int16 | 16 位整型 | -32768 到 32767 |
3 | int32 | 32 位整型 | -2147483648 到 2147483647 |
4 | int64 | 64 位整型 | -9223372036854775808 到 9223372036854775807 |
**int:**表示 32 位或 64 位整数,具体取决于底层平台。通常应该使用int来表示整数,除非需要使用特定大小的整数。
大小: 32 位系统中为 32 位,64 位系统中为 64 位。
范围: 32 位系统中为 -2147483648 至 2147483647,64 位系统中为 -9223372036854775808 至 9223372036854775807
package main
import "fmt"
func main() {
var a int = 89
b := 95
fmt.Println("a is", a, "and b is", b)
}
Run in playground
上面的程序会打印 a is 89 and b is 95
在上面的程序中,a 是 int 类型,*b 的类型是根据分配给它的值 (95) 推断出来的。*如上所述,int的大小在32位系统中为32位,在64位系统中为64位。
序号 | 类型 | 大小 | 范围 |
---|---|---|---|
1 | uint8 | 8 位整型 | 0 到 255 |
2 | uint16 | 16 位整型 | 0 到 65535 |
3 | uint32 | 32 位整型 | 0 到 4294967295 |
4 | uint64 | 64 位整型 | 0 到 18446744073709551615 |
**uint :**表示 32 或 64 位无符号整数,具体取决于底层平台。
size : 32 位系统中为 32 位,64 位系统中为 64 位。
范围: 32 位系统中为 0 到 4294967295,64 位系统中为 0 到 18446744073709551615
float32: 32 位浮点数
float64: 64 位浮点数
序号 | 类型 | 描述 |
---|---|---|
1 | float32 | 32位浮点型数 |
2 | float64 | 64位浮点型数 |
序号 | 类型 | 描述 |
---|---|---|
1 | Complex64 | 具有 float32 实部和虚部的复数 |
2 | Complex128 | 具有 float64 实部和虚部的复数 |
内置函数**complex**用于构造具有实部和虚部的复数。复数函数具有以下定义
func complex(r, i FloatType) ComplexType
它接受实部和虚部作为参数,并返回复杂类型。实部和虚部必须属于同一类型。 即float32或float64。如果实部和虚部都是 float32,则此函数返回 complex64 类型的复数值。如果实部和虚部都是 float64 类型,则此函数返回 complex128 类型的复数值
还可以使用简写语法创建复数
c := 6 + 7i
让我们编写一个小程序来理解复数。
package main
import (
"fmt"
)
func main() {
c1 := complex(5, 7)
c2 := 8 + 27i
cadd := c1 + c2
fmt.Println("sum:", cadd)
cmul := c1 * c2
fmt.Println("product:", cmul)
}
Run in playground
在上面的程序中,c1和c2是两个复数。c1 的实部为 5,虚部为 7。c2 有实部 8 和虚部 27。cadd
被赋予 c1 和 c2 之和,并被cmul
赋予 c1 和 c2 的乘积。
该程序将输出
sum: (13+34i)
product: (-149+191i)
序号 | 类型 | 描述 |
---|---|---|
1 | byte | uint8 的别名 |
2 | rune | int32 的别名 |
package main
import (
"fmt"
)
func main() {
first := "Naveen"
last := "Ramanathan"
name := first +" "+ last
fmt.Println("My name is",name)
}
Run in playground
在上面的程序中,首先分配了字符串*“Naveen”,最后分配了字符串“Ramanathan”。可以使用 + 运算符连接字符串。name被分配的值是first连接到一个空格*,后跟last。上面的程序将打印My name is Naveen Ramanathan
为输出。
还有一些可以对字符串执行的操作。我们将在单独的教程中介绍这些内容。
Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示:
转义符 含义
\r 回车符(返回行首)
\n 换行符(直接跳到下一行的同列位置)
\t 制表符
\' 单引号
\" 双引号
\\ 反斜杠
Go 对于显式类型非常严格。没有自动类型提升或转换。让我们通过一个例子来看看这意味着什么。
package main
import (
"fmt"
)
func main() {
//int
i := 55
//float64
j := 67.8
//int + float64 不允许
sum := i + j
fmt.Println(sum)
}
Run in playground
i 是 int 类型,j 是 float64 类型。我们正在尝试添加 2 个不同类型的数字,这是不允许的。当你运行程序时,你会得到./prog.go:10:11: invalid operation: i + j (mismatched types int and float64)
要修复此错误,i和j应该属于同一类型。让我们将j转换为 int。T(v) 是将值 v 转换为类型 T 的语法
package main
import (
"fmt"
)
func main() {
i := 55
j := 67.8
sum := i + int(j)
fmt.Println(sum)
}
Run in playground
现在,当您运行上面的程序时,您可以看到122
输出。
赋值的情况也是如此。将一种类型的变量分配给另一种类型需要显式类型转换。下面的程序对此进行了解释。
package main
import (
"fmt"
)
func main() {
i := 10
//如果不进行显式转换,此语句将不起作用
var j float64 = float64(i)
fmt.Println("j", j)
}
Run in playground
上一个教程- Go语言变量学习
下一个教程 - Go语言常量介绍