当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > Golang开发中常用的代码片段汇总

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

2017年12月08日  | 移动技术网IT编程  | 我要评论

本文主要总结的是我在编写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)
   }
  }
 }

总结

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网