Go语言数据类型实例讲解 - Go语言从入门到实战
基础数据类型
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte
rune
float32 float64
complex64 complex128
类型 | 描述 |
---|---|
bool | 布尔型(bool):可以是true或false。 |
string | 字符串类型:表示文本数据。 |
int | 整型:根据平台不同,可以是32位或64位。 |
int8 | 8位整型:取值范围为-128到127。 |
int16 | 16位整型:取值范围为-32768到32767。 |
int32 | 32位整型:取值范围为-2147483648到2147483647。 |
int64 | 64位整型:取值范围为-9223372036854775808到9223372036854775807。 |
uint | 无符号整型:根据平台不同,可以是32位或64位。 |
uint8 | 8位无符号整型:取值范围为0到255。 |
uint16 | 16位无符号整型:取值范围为0到65535。 |
uint32 | 32位无符号整型:取值范围为0到4294967295。 |
uint64 | 64位无符号整型:取值范围为0到18446744073709551615。 |
uintptr | 用于保存指针的无符号整型。 |
byte | uint8的别名。 |
rune | int32的别名,代表一个Unicode编码点。 |
float32 | 32位浮点数类型。 |
float64 | 64位浮点数类型。 |
complex64 | 64位复数类型,由两个32位浮点数表示实部和虚部。 |
complex128 | 128位复数类型,由两个64位浮点数表示实部和虚部。 |
类型转换
与其他主要编程语言的差异
- Go语言不允许隐式类型转换
- 别名和原有类型也不能进行隐式类型转换
package main import "testing" func TestType(t *testing.T) { var a int = 1 var b int64 = 2 // 这行代码会编译错误,因为无法完成从int到int64的隐式转换, 不允许将一个int类型的变量a赋值给int64类型的变量b。必须显式地将a转换为int64类型,才能赋值给b。// b = a // 必须显式转换类型 b = int64(a) t.Log(a, b)
}
类型的预定义值
math.MaxInt64
:这是int64
类型的最大值,即9223372036854775807。math.MaxFloat64
:这是float64
类型的最大值,即1.8e308。math.MaxUint32
:这是uint32
类型的最大值,即4294967295。
这些值是在math
包中定义的,它们可以用于比较和限制数值的范围,以防止溢出或下溢。
指针类型
Go语言指针主要包含两个重要概念:指针和切片
- 指针:
- 指针是Go语言中的一种特殊数据类型,它存储了一个变量的内存地址。通过使用指针,可以直接访问指向的内存地址上的值。
- 传递指针可以避免数据拷贝,提高性能。当传递大型数据结构时,使用指针可以避免将数据整体复制到函数栈上,而是直接操作原始数据。
- 可以使用指针来修改所指向的值。通过指针访问并修改内存地址上的值,会影响到原始变量的值。
- 类型指针是指向特定类型变量的指针。类型指针不能进行算术运算或偏移操作,只能与nil进行比较。
- 切片:
- 切片是对数组的一个引用,它包含了指向数组起始元素的指针、切片长度和切片容量。切片长度是切片中元素的数量,切片容量是从起始元素到底层数组的最后一个元素的数量。
- 切片比使用原始指针更安全,因为它具有内置的长度和容量检查。当尝试访问超出切片长度的索引时,Go语言会抛出运行时错误(panic),并显示堆栈信息,有助于调试。而使用原始指针时,越界访问可能导致程序崩溃,导致不会提供详细的错误信息。
- 切片是动态长度的,可以根据需要增长或缩小。这使得切片非常适合用于处理可变长度的数据序列。
与其他主要编程语言的差异
- 不支持指针运算,不能通过增加或减少指针的值来访问内存中的其他位置。
- string是值类型,其默认的初始化值为空字符串,而不是nil。在Go语言中,字符串是一种值类型,当创建一个字符串变量时,它会在内存中有一个具体的值。
package type_testimport "testing"type MyInt int64func TestPoint(t *testing.T) {a := 1aPtr := &a //创建了一个指向a的指针aPtr//aPtr = aPtr + 1t.Log(a, aPtr)t.Logf("%T %T", a, aPtr) //打印它们的类型
}func TestString(t *testing.T) {var s stringt.Log("*" + s + "*") //初始化零值是“”t.Log(len(s)) //s的值为默认的空字符串。打印s的长度,应为0。}
学习Go语言主要是多练,多找些代码段写写,不懂可以私聊咨询。
欢迎关注云尔Websites CSDN博客