fallthrough 穿透
当某个case匹配成功后执行,如果有fallthrough,那么后面紧邻的case不再匹配,直接执行
//math/rand包下 //时间 t1:=time.Now().Unix() fmt.Println(t1) //设置种子数 rand.Seed(t1) //设置获取随机数的种子数 num1:=rand.Intn(10) //[0,10) fmt.Println(num1) 数组 var arr [4]int var b=[4]int{1,2,3,4} f:=[...] int{1,2,3,4,5} len() 长度 cap() 容量 //因为数组是定长的容器,长度和容量是相同的 range 对数组 取数组的下标和value for index,value :=range arr{ fmt.Println("下标是",index,"数值是",value) } for _,v :=range arr{ fmt.Println(v) } 二维数组 arr:=[4][3]int{{1,2,3},{1,2,3},{1,2,3},{1,2,3}} 切片 切片slice 同数组类似,也叫做变长数组 是一个引用类型的容器,指向了一个底层数据 因为切片是引用数据的数据,直接拷贝的是地址 浅拷贝:拷贝的数据地址 copy() 深拷贝: 拷贝的数据本身 s2:=[]int{1,2,3,4} 内置函数 make() s1:=make([] 类型 ,len,cap) 第一个参数:切片的类型,第二个参数:len,第三个参数容量,如果省略,默认跟第二个一样 ---------------- s2:=make([] int,3) s2=append(s2,1,2,3,4) a[start:end] //包左不包右 当向切片添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增加) /* 数组传递的是数据 切片传递的是地址*/ s1:=[] int{1,2,3,4,5} fmt.Println(s1) s2:=s1 fmt.Println(s2) s2[0]=100 fmt.Println(s1) fmt.Println("--------") s3:=[5] int{1,2,3,4,5} fmt.Println(s3) s4:=s3 fmt.Println(s4) s4[0]=100 fmt.Println(s4) fmt.Println(s3) copy copy(s1,s2) 把s2拷贝到s1,但是不会改变长度,能装多少装多少 s1 := []int{1, 2, 3, 4, 5} s2 := []int{6, 7, 8, 9} copy(s1,s2) fmt.Println(s1) 字符串操作一个字节的切片
strings包下的字符串函数
strings.Contains() 是否包含指定的内容
strings.ContainsAny() 是否包含任意一个字符
Repeat 自己拼接自己count次
大小写转换 ToLower() ToUpper()
切割Split() SplitN()
Index IndexAny
LastIndex() LastIndexAny()
Replace(s,old,new,n)
Trim()
HasPerfix() 以xx前缀开头
HasSuffix() 以xx后缀结尾
查找
EqualFold不区分大小写的字符串比较
index 找不到返回-1
TrimSpace() 将字符串左边两边的空格去掉
Trim("元字符串",指定要去除的) 将指定的字符串左右两边空格去掉(有区别哦)
...
字符串遍历,同时处理有中文的问题 r:[]rune(str)
str:="hello被" r:=[]rune(str) for i:=0;i<len(r);i++{ fmt.Printf("%c\n",r[i]) }
字符串转整数 n,err=strconv.Atoi("12")
b:="65" s2, _ :=strconv.Atoi(b) fmt.Printf("%v",s2)整数转字符串 str=strconv.Itoa(1234)
字符串 转[]byte: var bytes=[]byte("hello go")
[]byte转字符串 str=string([]byte{'a','b','c'})
十进制转2,8,16进制str=strconv.FormatInt(123,2)//2->8,16
map, 映射key ,value 也是一个容器,存储的无序键值对
key不重复,重复就覆盖
map声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用
类型%T
m:=map[string]int{"one":1,"two":2} m:=make(map[string]int) nil 空 将map存进切片中 s1:=make([] map[string]string,0,3)通过key获取value,当key如果不存在的时候,我们会得到value的默认值
map1[key]=value,根据key获取map中对应的value
value,ok:=map[key] 如果键值对存在,value就是对应的数据,ok为true
如果key不存在获取,获取的是 值的默认值,ok为false,默认key为0
value,ok:=map[key] f ok{ fmt.Println("对应的数值是:",v1) }else{ fmt.Println("操作的key不存在",vl) }内置函数delete
delete(map1,key)
sort排序
sort.Ints(key) 字符按照字符串的编码值排序
str="FKJKJFJdfjakfjakKSKJW" map1 := make(map[byte]int) for i := 0; i < len(str); i++ { val, ok := map1[str[i]] if ok { val++ } else { val = 1 } map1[str[i]] = val } keys := make([]byte, 0, len(map1)) for k := range map1 { keys = append(keys, k) } for _, k := range keys { fmt.Printf("%c,%d\n", k, map1[k]) } map1:=make(map[string]map[string]string) //需要定义长度 map1["name"]=make(map[string]string,3) map1["liming"]=make(map[string]string,3) map1["name"]["name3"]="张三" map1["name"]["name1"]="李四" map1["name"]["name2"]="王五" map1["liming"]["xiaoming1"]="小明" map1["liming"]["xiaoming2"]="小红" map1["liming"]["xiaoming3"]="小白" for k,v :=range map1{ fmt.Println(k,v) for k2,v2:=range v{ fmt.Println(k2,v2) } } timetime.new 获取当前时间
格式化事件fmt.Printf fmt.SPrintf
now:=time.Now() fmt.Printf("now=%v,now\n",now) fmt.Printf("%d-%d-%d %d:%d:%d\n",now.Year(),now.Month(),now.Day(),now.Hour(),now.Minute(),now.Second())time.Format()
fmt.Printf(now.Format("2018-12-12 14:34:23))Unix() 1970到现在的毫秒值
UnixNano 1970到现在的纳秒值
内置函数
len