类型

简介: 类型

基本类型

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 根据不同的底层平台,表示 3264 位有符号整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。 32 位系统下是 32 位,而在 64 位系统下是 64 位。 32 位系统下是[-2147483648, 2147483647], 在 64 位系统下是[-9223372036854775808, 9223372036854775807]


Printf 方法中,使用 %T 格式说明符,可以打印出变量的类型。 Gounsafe 包提供了一个 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 根据不同的底层平台,表示 3264 位无符号整型 32 位系统下是 32 位,而在 64 位系统下是 64 位。 32 位系统下是[0, 4294967295], 在 64 位系统下是[0, 18446744073709551615]


浮点型

  • float3232位浮点数
  • float6464位浮点数


浮点数的默认类型是 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点击复制复制失败已复制


该函数的参数分别是实部虚部,并返回一个复数类型。实部和虚部应该是相同类型,也就是 float32float64 。如果实部和虚部都是 float32 类型,则函数会返回一个 complex64 类型的复数。如果实部和虚部都是 float64 类型,则函数会返回一个 complex128 类型的复数。


还可以使用简短语法来创建复数:

c := 6 + 7i点击复制复制失败已复制


其他数字类型

  • byteuint8 的别名。
  • runeint32 的别名。


关于这两个类型的详细讨论,请转至笔记: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)
}
目录
相关文章
|
6月前
|
传感器 人工智能 图形学
UnityAI——常用感知类型的实现
UnityAI——常用感知类型的实现
|
3天前
|
Python
布尔类型的值和类型
布尔类型的值和类型。
8 0
|
3月前
|
Kubernetes 负载均衡 网络协议
在k8S中,Servic类型有哪些?
在k8S中,Servic类型有哪些?
|
5月前
|
编译器 程序员 语音技术
C++的超20种函数类型分享
C++超20种函数类型:编程语言规定规则,编译器实现预定规则
|
程序员 数据库
软件文档的类型有哪些?
软件文档的类型有哪些?
212 0
|
JavaScript 前端开发
比较不同的类型
比较不同的类型
94 0
|
JSON JavaScript C语言
转换类型的那些事儿
转换类型的那些事儿
118 0
类型和值
类型和值
73 0
|
测试技术 Android开发
怎么知道方法的参数有哪些类型呢?
怎么知道方法的参数有哪些类型呢?
211 0