1. 数组(包括数组指针)、切片(slice)、mapchannel、字符串等数据类型的长度,注意,结构休(struct)、整型布尔等不能作为参数传给len函数。
    2. channel:通道中未读的元素个数
    3. 字符串:字节数,并非字符串的字符数
    4. var arr = [...]int{5:2}
    5. //数组指针
    6. var p1 *[6]int = &arr
    7. fmt.Println(reflect.TypeOf(arr),reflect.TypeOf(p1),len(arr),len(p1))
    8. x,y:=1,2
    9. //指针数组
    10. p2 := [...]*int{&x,&y}
    11. fmt.Println(reflect.TypeOf(arr),len(arr),arr)
    12. fmt.Println(reflect.TypeOf(p1),len(p1),p1)
    13. fmt.Println(reflect.TypeOf(p2),len(p2),p2)
    14. ch:=make(chan int,10)
    15. go func(){
    16. for i:=0;i<15;i++{
    17. ch<-i
    18. }
    19. close(ch)
    20. }()
    21. time.Sleep(100*time.Millisecond)
    22. for v:=range ch{
    23. fmt.Println(len(ch),v)
    24. }
    25. fmt.Printf("ch %d %+v",len(ch),ch)
    26. ch=nil
    27. fmt.Printf("ch %d %+v",len(ch),ch)
    28. // map slice
    29. maptest:=make(map[int]string)
    30. maptest[1]="1"
    31. maptest=nil
    32. sl:=[]int{1,2,3}
    33. sl = nil
    34. fmt.Println(maptest,len(maptest),sl,len(sl))
    35. //可以同时被赋值为nil,但这两个nil并不能比较
    36. //fmt.Println(maptest==sl)//mismatched types map[int]string and []int
    37. if maptest==nil && sl==nil{
    38. fmt.Println("nil maptest and slice:%+v,%+v",maptest,sl)
    39. }
    40. var maptest2 map[int]string
    41. var sl2 []int
    42. if maptest2==nil && sl2==nil{
    43. fmt.Println("nil 2 maptest and slice:%+v,%+v",maptest,sl)
    44. }
    45. str1 := "学习Go"//2+2个字符
    46. fmt.Println(len(str1))//2*3+2*1=8
    47. str2 := "a#😳" //emoji
    48. fmt.Println(str2)
    49. fmt.Println(len(str2))//1+1+4=6
    50. //utf8
    51. fmt.Println(utf8.RuneCountInString(str1)) //length;4
    52. fmt.Println(utf8.RuneCountInString(str2)) //length: 3
    1. package main
    2. import (
    3. "fmt"
    4. "strconv"
    5. )
    6. func main() {
    7. 定义一个切片
    8. ch := make(chan int, 10)
    9. go func() {
    10. for a := 1; a < 31; a++ {
    11. ch <- a
    12. //url := "http://uuwg278.xyz/Application/Runtime/Logs/Home/22_06_" + strconv.Itoa(a)
    13. ////logs := "01.log"
    14. //fmt.Println(url)
    15. }
    16. close(ch)
    17. }()
    18. for v := range ch {
    19. num := strconv.Itoa(v)
    20. if (len(num) == 1) {
    21. num = "0" + num
    22. }
    23. fmt.Printf(num)
    24. url := "http://uuwg278.xyz/Application/Runtime/Logs/Home/22_06_" + num
    25. fmt.Printf(url)
    26. }