1、打开获取文件 os.Open

2、bufio.NewReader() 用带缓冲的io读文件句柄

3、err == eof 判断一下是否为文件末尾

4、写一个pasrse函数解析每一行的数据(ip,url,status),字段可以通过strings.Split 或 空白分割的 strings.Fields 方法来获取。

当文件格式索引模式有问题,可以根据返回的切片个数来判断,并抛出错误。必须保证在切片索引范围之内可以访问到值,否则会报错。

状态码可以通过 strconv.Atoi将字符串转换为数字

5、定义3个 map[string]int 类型的变量,使用 ipSats[ip]++的方式对ip、状态码等进行计数统计。

6、对获得的状态码数据进行排序

  1. ipStatsSlice := make([][]interface{},0,len(ipStats))
  2. for k,v :=range ipStats {
  3. ipStatsSlice=append(ipStatsSlice,[]interface{}{k,v})
  4. }
  5. //冒泡
  6. sort.Slice(ipStatsSlice,func(i,j int){
  7. count1:=ipStatsSlice[i][1].(int)
  8. count2:=ipStatsSlice[j][1].(int)
  9. return count1 < count2
  10. })
  11. //获取后10个数据
  12. for i:=len(ipStatsSlice); i>=0;i--{
  13. fmt.Println(ipStatsSlice[i])
  14. }
  15. //获取前10个数据
  16. topn:=10
  17. for i :=len(ipStatsSlice) -1 ;i>=0;len(ipStatsSlice)-topn;i--{
  18. fmt.Println(ipStatsSlice[i])
  19. }
文档更新时间: 2023-04-12 11:18   作者:张尚