go中len和sizeof区别
在Go语言中,len
和sizeof
的主要区别在于它们的功能和使用场景。
len函数
len
函数是Go语言中的一个内置函数,用于获取数组、切片、字符串、映射和通道等数据类型的长度或元素个数。具体来说:
- 数组和切片:
len(arr)
返回数组或切片的长度。 - 字符串:
len(s)
返回字符串的长度,即其中的字符数。 - 映射(map):
len(m)
返回映射中键值对的数量。 - 通道(channel):
len(ch)
返回通道中待处理元素的数量。
sizeof函数
在Go语言中,并没有直接的sizeof
函数,但可以通过unsafe
包中的Sizeof
函数来获取变量或数据结构的大小。unsafe.Sizeof
函数返回的是变量或数据结构占用的内存大小,而不是实际使用的大小。具体特点包括:
- 内存占用:返回的是变量或数据结构占用的内存大小,包括对齐等额外的内存空间。
- 静态计算:
unsafe.Sizeof
函数在编译期就进行求值,而不是在运行时。
示例代码
var arr = :ml-citation{ref="1" data="citationList"}int{1, 2, 3, 4, 5, 6}
fmt.Println("数组长度:", len(arr)) // 输出: 6
fmt.Println("数组大小:", unsafe.Sizeof(arr)) // 输出: 48(假设int类型占用8字节)
在这个例子中,len(arr)
返回数组的长度(6),而unsafe.Sizeof(arr)
返回数组占用的总内存大小(假设int类型占用8字节,6个int类型元素共48字节)。