欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Golang开发中常用的代码片段汇总

程序员文章站 2022-03-20 16:18:21
本文主要总结的是我在编写golang应用时使用到的代码片段,提供出来以备以后使用,也给需要的朋友们以参考学习,下面话不多说,来看看详细介绍: 一、通过http packa...

本文主要总结的是我在编写golang应用时使用到的代码片段,提供出来以备以后使用,也给需要的朋友们以参考学习,下面话不多说,来看看详细介绍:

一、通过http package发送user:passwd信息

 发送类似于 curl -u 的请求
 client := &http.client{}
 req, err := http.newrequest("get", <url>, nil)
 req.setbasicauth(<username>, <userpasswd>)
 if err != nil {
  log.fatal(err)
 }

 resp, err := client.do(req)
 if err != nil {
  log.fatal(err)
 }
 content, err := ioutil.readall(resp.body)
 if err != nil {
  log.fatal(err)
 }

二、golang通过反射将未知对象转换为array

func interfaceslice(slice interface{}) []interface{} { 
 s := reflect.valueof(slice)
 if s.kind() != reflect.slice {
  panic("interfaceslice() given a non-slice type")
 }

 ret := make([]interface{}, s.len())

 for i := 0; i < s.len(); i++ {
  ret[i] = s.index(i).interface()
 }

 return ret
}

三、mux 获取get query参数

 vals := r.url.query()
 oridriver, ok := vals["driver"]

四、mux 跨域访问代码

  methodsok := handlers.allowedmethods([]string{"get", "head", "post", "put", "options"})
 headersok := handlers.allowedheaders([]string{"x-requested-with"})
 originsok := handlers.allowedorigins([]string{"*"})
 log.println(http.listenandserve(":8000", handlers.cors(headersok, originsok, methodsok)(r)))

五、递归查找文件

 func readapk(path string, apk map[string]int) {
 // fmt.println("处理", path)
 files, _ := ioutil.readdir(path)
 for _, file := range files {
  // fmt.println(file.name(), file.isdir())
  if file.isdir() {
   readapk(path+"/"+file.name(), apk)
  } else {
   if strings.compare(file.name(), "apk.log") == 0 {
    ap := make(map[string]string)
    body, err := ioutil.readfile(path + "/" + file.name())
    if err != nil {
     fmt.printf("[%s]读取失败[%s]\n", file.name(), err.error())
     return
    }

    err = json.unmarshal(body, &ap)
    if err != nil {
     fmt.printf("[%s]解析失败[%s]\n", file.name(), err.error())
     return
    }

    for a := range ap {
     at := strings.split(ap[a], "|+|")
     for _, atemp := range at {
      info := strings.split(atemp, "|-|")
      if len(info) > 1 {
       header := strings.split(info[1], " ")
       for _, h := range header {
        if strings.contains(h, "referer:") {
         u, err := url.parserequesturi(h[8:])
         if err != nil {
          fmt.println(err.error())
         } else {
          apk[u.host]++
         }
        }
       }
      }

     }
    }
   }
  }
 }
}

六、解析mongo已经存在的数据

type app struct { 
 id string `json:"id" bson:"_id,omitempty"`
 user_id string `bson:"user_id"`
 name string `bson:"name"`
 domain string `bson:"domain"`
 business_line string `bson:"business_line"`
}

重点:

      1.使用bson修饰符 

      2.各个flag直接使用空格分割 

      3._id和omitempty使用,分割。同时不能存在空格 

七、定时器

 for {
  now := time.now()
  next := now.add(time.minute * 10)
  next = time.date(next.year(), next.month(), next.day(), next.hour(), next.minute(), 0, 0, next.location())
  t := time.newtimer(next.sub(now))
  log.printf("下次采集时间为[%s]\n", next.format("200601021504"))

  select {
  case <-t.c:
   err := sync.gather()
   if err != nil {
    log.println(err)
   }
  }
 }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。