快速理解和记忆Golang数据类型

快速理解和记忆 Golang 数据类型



golang 数据类型概要

Go 语言的所有数据类型可以划分为值类型和值类型引用类型两大类。整体来说,Go 一共有 14 种数据类型,其中值类型 9 种,引用类型 5 种。数据类型的不同特征体现在内存管理、传值和并发操作里。

值类型引用类型简述

  • 值类型:该类型的变量直接存储数据本身。变量的值在赋值和传递时会进行复制,修改一个变量的值不会影响其他变量。

  • 引用类型:该类型的变量存储的是数据的内存地址或引用。当变量的引用被复制时,数据本身不会被复制,多个变量可以指向同一块内存区域,修改其中一个变量的数据,会影响到所有指向该数据的变量。

类型分类数据类型数量备注
值类型 (Value Types)bool1布尔类型
int, int8, int16, int32, int6455种整数类型
uint, uint8, uint16, uint32, uint6455种无符号整数类型
float32, float6422种浮动类型
complex64, complex12822种复数类型
string1字符串类型
数组[n]T1固定长度的数组
结构体struct1自定义的数据类型
指针*T1存储数据地址的指针
引用类型 (Reference Types)切片[]T1动态数组
映射map[K]V1键值对集合(哈希表)
通道chan T1用于并发通信的通道
接口interface1定义行为的接口
函数func1一等公民的函数类型
合计14

一、值类型

值类型是最基础的数据类型,变量存储的是数据的副本,而不是指向数据的引用。它们在赋值时会复制数据,因此变量之间是相互独立的。

1.1 基本类型

1.1.1 布尔类型 (bool)

布尔类型只能取两个值:truefalse。它常用于条件判断和逻辑控制。

var isTrue bool = true
1.1.2 整数类型 (int, int8, int16, int32, int64)

Go 中的整数类型分为有符号整数和无符号整数,int 是默认的整数类型,它根据平台(32位或64位)大小不同,通常为 32 位或 64 位。

  • int8int16int32int64 表示不同位数的有符号整数。
  • uint8uint16uint32uint64 表示不同位数的无符号整数。
var x int = 42
var y int64 = 123456789012345
1.1.3 浮点类型 (float32, float64)

浮点数类型用于表示带有小数部分的数值。float32float64 是标准的浮点数类型,float64 提供更高的精度。

var a float32 = 3.14
var b float64 = 2.718281828459045
1.1.4 复数类型 (complex64, complex128)

复数类型由实部和虚部组成,complex64 使用 float32 存储实部和虚部,complex128 使用 float64 存储。

var c complex64 = complex(1.5, 2.5)
var d complex128 = complex(3.0, 4.0)
1.1.5 字符串类型 (string)

字符串是字符的序列,Go 中的字符串是不可变的(immutable),即一旦创建不能修改。

var str string = "Hello, Go!"

1.2 组合类型

1.2.1 数组 ([n]T)

数组是固定长度的、相同类型的元素的集合。在 Go 中,数组的大小是其类型的一部分,所以数组的长度是类型的一部分。

var arr [3]int = [3]int{1, 2, 3}
1.2.2 结构体 (struct)

结构体是用户自定义的数据类型,它将多个不同类型的变量组合在一起。

type Person struct {
    Name string
    Age  int
}

var p Person = Person{Name: "Alice", Age: 30}
1.2.3 指针 (*T)

指针类型存储的是另一个变量的地址。指针是值类型,但它指向的是引用类型。

var ptr *int
a := 58
ptr = &a // 获取变量a的地址

二、引用类型

引用类型的变量不存储数据本身,而是存储数据的引用(地址)。当变量被赋值或传递时,不会复制数据,而是复制引用,这意味着多个变量可以共享同一块内存区域。

2.1 切片 ([]T)

切片是一个动态数组,大小可以随时变化。切片是 Go 中非常强大的数据结构,通常用于处理不确定大小的集合。

var s []int = []int{1, 2, 3}

2.2 映射 (map[K]V)

映射是一种无序的键值对集合,类似于哈希表。它通过键值对存储数据,并通过键访问数据。

var m map[string]int = map[string]int{"apple": 5, "banana": 2}

2.3 通道 (chan T)

通道是 Go 中用于并发编程的原语,它允许不同的 goroutine 之间通过发送和接收消息进行通信。

ch := make(chan int)
go func() {
    ch <- 42 // 发送数据到通道
}()
val := <-ch // 从通道接收数据

2.4 接口 (interface{})

接口定义了方法集,是 Go 的核心特性之一。一个类型实现了某个接口的方法集,就自动实现了该接口。

var x interface{}
x = 42
x = "Hello"

2.5 函数 (func)

函数在 Go 中也是一种类型,允许将函数作为参数传递,或者作为返回值返回。

var add func(int, int) int
add = func(a, b int) int { return a + b }

总结

Go 语言提供了丰富的内置数据类型,总共有 14 种类型,分别分为值类型和引用类型两大类:

  • 值类型:布尔值、整数、浮点数、复数、字符串、数组、结构体和指针。
  • 引用类型:切片、映射、通道、接口和函数。

值类型存储的是数据本身,赋值时会复制数据,彼此之间独立。引用类型存储的是数据的引用或地址,赋值时复制的是引用,多个变量可以共享同一块内存区域。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值