golang len函数 字符长度

数组(包括数组指针)、切片(slice)、map、channel、字符串等数据类型的长度,注意,结构休(struct)、整型布尔等不能作为参数传给len函数。
channel:通道中未读的元素个数
字符串:字节数,并非字符串的字符数

	var arr =  [...]int{5:2}
	//数组指针
	var p1 *[6]int = &arr
	fmt.Println(reflect.TypeOf(arr),reflect.TypeOf(p1),len(arr),len(p1))

	x,y:=1,2
	//指针数组
	p2 := [...]*int{&x,&y}
	fmt.Println(reflect.TypeOf(arr),len(arr),arr)
	fmt.Println(reflect.TypeOf(p1),len(p1),p1)
	fmt.Println(reflect.TypeOf(p2),len(p2),p2)

	ch:=make(chan int,10)
	go func(){
		for i:=0;i<15;i++{
			ch<-i
		}
		close(ch)
	}()
	time.Sleep(100*time.Millisecond)

	for v:=range ch{
		fmt.Println(len(ch),v)
	}
	fmt.Printf("ch %d %+v",len(ch),ch)
	ch=nil
	fmt.Printf("ch %d %+v",len(ch),ch)
	
	// map slice
	maptest:=make(map[int]string)
	maptest[1]="1"
	maptest=nil

	sl:=[]int{1,2,3}
	sl = nil
	fmt.Println(maptest,len(maptest),sl,len(sl))
	//可以同时被赋值为nil,但这两个nil并不能比较
	//fmt.Println(maptest==sl)//mismatched types map[int]string and []int
	if maptest==nil && sl==nil{
		fmt.Println("nil maptest and slice:%+v,%+v",maptest,sl)
	}

	var maptest2 map[int]string
	var sl2 []int
	if maptest2==nil && sl2==nil{
		fmt.Println("nil 2 maptest and slice:%+v,%+v",maptest,sl)
	}
	str1 := "学习Go"//2+2个字符
	fmt.Println(len(str1))//2*3+2*1=8

	str2 := "a#😳" //emoji
	fmt.Println(str2)
	fmt.Println(len(str2))//1+1+4=6

	//utf8
	fmt.Println(utf8.RuneCountInString(str1)) //length;4
	fmt.Println(utf8.RuneCountInString(str2)) //length: 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值