go常用操作
倒序遍历切片中的元素
package t9 import ( "fmt" "testing" ) func TestRange(t *testing.T) { lst1 := []int{1, 2, 3, 4, 5} // 方法1 for index := range lst1{ curr := lst1[len(lst1) - (index+1)] fmt.Println(curr) } /* 5 4 3 2 1 */ fmt.Println("==================================") // 方法2 for i := len(lst1)-1; i >=0; i--{ curr := lst1[i] fmt.Println(curr) } /* 5 4 3 2 1 */ }
判断字符串是否在切片中
package main import "fmt" func main() { var accountArr2 = []string{"id", "name", "status", "timezone", "created_at", "updated_at", "organization_id"} flag := IsContain2(accountArr2, "whw") fmt.Println(flag) } // 判断字符串是否在切片中~~ func IsContain2(strList []string, item string) bool { for _, str := range strList { if str == item { return true } } return false }
给字典排序
package main import ( "fmt" "sort" ) func main() { // map排序 map1 := map[string]int{ "awhw":1, "naruto":22, "sasuke":33, } fmt.Println(map1) // map[awhw:1 naruto:22 sasuke:33] var keys []string for key, _ := range map1{ keys = append(keys,key) } // 给key排序 sort.Strings(keys) // 放入另外一个空间 map2 := make(map[string]int) for _, val := range keys{ map2[val] = map1[val] } fmt.Println(map2) //map[awhw:1 naruto:22 sasuke:33] }
整理切片格式(实践经验)
给定一个存放时间字符串的切片:
[2020-01-01 2020-01-02 2020-01-03 2020-01-04 2020-01-05 2020-01-06 2020-01-07 2020-01-08 2020-01-09 2020-01-10 2020-01-11 2020-01-12 2020-01-13 2020-01-14 2020-01-15 2020-01-16 2020-01-17 2020-01-18 2020-01-19 2020-01-20 2020-01-21 2020-01-22 2020-01-23 2020-01-24 2020-01-25 2020-01-26 2020-01-27 2020-01-28 2020-01-29 2020-01-30 2020-01-31 2020-02-01 2020-02-02 2020-02-03 2020-02-04 2020-02-05 2020-02-06 2020-02-07 2020-02-08 2020-02-09 2020-02-10 2020-02-11 2020-02-12 2020-02-13 2020-02-14 2020-02-15 2020-02-16 2020-02-17 2020-02-18 2020-02-19 2020-02-20 2020-02-21 2020-02-22 2020-02-23 2020-02-24 2020-02-25 2020-02-26 2020-02-27 2020-02-28 2020-02-29 2020-03-01 2020-03-02 2020-03-03 2020-03-04 2020-03-05 2020-03-06 2020-03-07 2020-03-08 2020-03-09 2020-03-10 2020-03-11 2020-03-12 2020-03-13 2020-03-14 2020-03-15 2020-03-16 2020-03-17 2020-03-18 2020-03-19 2020-03-20 2020-03-21 2020-03-22 2020-03-23 2020-03-24 2020-03-25 2020-03-26 2020-03-27 2020-03-28 2020-03-29 2020-03-30 2020-03-31 2020-04-01 2020-04-02 2020-04-03 2020-04-04 2020-04-05 2020-04-06 2020-04-07 2020-04-08 2020-04-09 2020-04-10 2020-04-11 2020-04-12 2020-04-13 2020-04-14 2020-04-15 2020-04-16 2020-04-17 2020-04-18 2020-04-19 2020-04-20 2020-04-21 2020-04-22 2020-04-23 2020-04-24 2020-04-25 2020-04-26 2020-04-27 2020-04-28 2020-04-29 2020-04-30 2020-05-01 2020-05-02 2020-05-03 2020-05-04 2020-05-05 2020-05-06 2020-05-07 2020-05-08 2020-05-09 2020-05-10 2020-05-11 2020-05-12 2020-05-13 2020-05-14 2020-05-15 2020-05-16 2020-05-17 2020-05-18 2020-05-19 2020-05-20 2020-05-21 2020-05-22 2020-05-23 2020-05-24 2020-05-25 2020-05-26 2020-05-27 2020-05-28 2020-05-29 2020-05-30 2020-05-31 2020-06-01 2020-06-02 2020-06-03 2020-06-04 2020-06-05 2020-06-06 2020-06-07 2020-06-08 2020-06-09 2020-06-10 2020-06-11 2020-06-12 2020-06-13 2020-06-14 2020-06-15 2020-06-16 2020-06-17 2020-06-18 2020-06-19 2020-06-20 2020-06-21 2020-06-22 2020-06-23 2020-06-24 2020-06-25 2020-06-26 2020-06-27 2020-06-28 2020-06-29 2020-06-30 2020-07-01 2020-07-02 2020-07-03 2020-07-04 2020-07-05 2020-07-06 2020-07-07 2020-07-08 2020-07-09 2020-07-10 2020-07-11 2020-07-12 2020-07-13 2020-07-14 2020-07-15 2020-07-16 2020-07-17 2020-07-18 2020-07-19 2020-07-20 2020-07-21 2020-07-22 2020-07-23 2020-07-24 2020-07-25 2020-07-26 2020-07-27 2020-07-28 2020-07-29 2020-07-30 2020-07-31 2020-08-01 2020-08-02 2020-08-03 2020-08-04 2020-08-05 2020-08-06 2020-08-07 2020-08-08 2020-08-09 2020-08-10 2020-08-11 2020-08-12 2020-08-13 2020-08-14 2020-08-15 2020-08-16 2020-08-17 2020-08-18 2020-08-19 2020-08-20 2020-08-21 2020-08-22 2020-08-23 2020-08-24 2020-08-25 2020-08-26 2020-08-27 2020-08-28 2020-08-29 2020-08-30 2020-08-31 2020-09-01 2020-09-02 2020-09-03 2020-09-04 2020-09-05 2020-09-06 2020-09-07 2020-09-08 2020-09-09 2020-09-10 2020-09-11 2020-09-12 2020-09-13 2020-09-14 2020-09-15 2020-09-16 2020-09-17 2020-09-18 2020-09-19]
把它里面的字符串按照每4个一组整理成切片套切片的格式!
有问题的方法(有问题)
// 根据存时间字符串的切片获取一个按照每4天分组的新切片 func getNewDateSlice(dateSlice []string) [][]string{ var retSlice [][]string length := len(dateSlice) //fmt.Println("length>>> ", length) // 263 //// 可以分多少份 //allParts := length / 4 //fmt.Println("allParts>>> ", allParts) // 65 //// 剩下多少个 //remainder := length % 4 //fmt.Println("remainder>>> ", remainder) // 3 // 分组 for i := 0; i < length; i+=4 { currSLice := dateSlice[i:i+4] retSlice = append(retSlice, currSLice) } return retSlice }
注意结果会报错!如果 i+4 超过了length的话会上报越界错误!
正确的方法(正确)
出现问题的原因是如果i+4超出了length的话,再使用切片就会使得最后这些值默认转成空字符串。正确的方法需要处理一下边界值,如果i+4大于了length就用边界的length即可:
// 根据存时间字符串的切片获取一个按照每4天分组的新切片 func getNewDateSlice(dateSlice []string) [][]string { var retSlice [][]string length := len(dateSlice) // 分组 for i := 0; i < length; i += 4 { var currSlice []string if i+4 > length{ currSlice = dateSlice[i : length] }else{ currSlice = dateSlice[i : i+4] } retSlice = append(retSlice, currSlice) } return retSlice }
整理切片数据--下一个列表的开头是上一个列表的结尾
输入:
lst1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}
输出:
[[1 2 3 4 5 6] [6 7 8 9 10 11] [11 12 13]]
代码:
package t9 import ( "fmt" "testing" ) // 返回两个int最小的那个 func minInt(a, b int) int { if a < b { return a } return b } func TestOutRange(t *testing.T) { lst1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13} var ret [][]int for i := 1; i < len(lst1); i += 5{ currLst := lst1[i-1 : minInt(i+5, len(lst1))] ret = append(ret, currLst) } fmt.Println("ret>>> ", ret) }
~~~