数组(包括数组指针)、切片(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
package mainimport ( "fmt" "strconv")func main() { 定义一个切片 ch := make(chan int, 10) go func() { for a := 1; a < 31; a++ { ch <- a //url := "http://uuwg278.xyz/Application/Runtime/Logs/Home/22_06_" + strconv.Itoa(a) ////logs := "01.log" //fmt.Println(url) } close(ch) }() for v := range ch { num := strconv.Itoa(v) if (len(num) == 1) { num = "0" + num } fmt.Printf(num) url := "http://uuwg278.xyz/Application/Runtime/Logs/Home/22_06_" + num fmt.Printf(url) }