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