数组(包括数组指针)、切片(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 main
import (
"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)
}