len()函数原理

len()函数原理

当调用len()函数时,它根据参数的类型来返回不同的结果:
  1. 字符串(string): 返回字符串中的字节数(按字节计算)。
  2. 数组(array)和切片(slice): 返回数组或切片中的元素个数。
  3. 映射(map): 返回映射中键值对的数量。
  4. 通道(channel): 返回当前通道中待处理的元素个数。

在Go语言中,len()函数的原理是通过查看不同类型对象的底层数据结构或属性,来确定长度或元素个数。对于大多数类型,len()函数的计算都是基于底层数据结构直接访问,因此执行速度高效。

对于字符串,len()函数返回的是字符串中的字节数,而不是字符数。Go语言中的字符串是以UTF-8编码的字节数组表示的,因此使用len()函数计算的是字符串所占用的字节数。

对于数组和切片,它们虽然底层都是字节数组,但len()函数的行为是相同的。len()函数返回数组或切片中的元素个数。这是因为数组和切片在内存中是连续存储的,所以可以通过计算内存块的大小来确定元素的个数。

总结来说,len()函数是Go语言的一个内置函数,用于返回不同类型对象的长度或元素个数。它的原理是根据不同的参数类型来计算长度,并且在大多数情况下都具有高效的执行速度。

测试代码:

func TestLen(t *testing.T) {
	s := "string"
	sZh := "你好"

	ints := make([]int, 5)
	ints = append(ints, 2)
	c := make(chan int, 2)

	fmt.Printf("len of s:%v\n", len(s))         // len of s:6
	fmt.Printf("len of sZh:%v\n", len(sZh))     // len of sZh:6
	fmt.Printf("len of ints:%v\n", len(ints))   // len of ints:6,说明一个中文占3个字节
	fmt.Printf("cap of ints:%v\n", cap(ints))   // cap of ints:10
	fmt.Printf("len of channel c:%v\n", len(c)) // len of channel c:0
	fmt.Printf("cap of channel c:%v\n", cap(c)) // cap of channel c:2
	c <- 1
	fmt.Printf("len of channel c:%v\n", len(c)) // len of channel c:1
	go func() {
		num := <-c
		fmt.Printf("num from channel:%v\n", num) // num from channel:1
	}()
	time.Sleep(3 * time.Second)
	fmt.Printf("len of channel c:%v\n", len(c)) // len of channel c:0,读取后channel待处理元素为0个
}

你可能感兴趣的:(goland,后端,golang)