Golang开发中常用的代码片段汇总
本文主要总结的是我在编写golang应用时使用到的代码片段,提供出来以备以后使用,也给需要的朋友们以参考学习,下面话不多说,来看看详细介绍:
一、通过httppackage发送user:passwd信息
发送类似于curl-u的请求 client:=&http.Client{} req,err:=http.NewRequest("GET",,nil) req.SetBasicAuth( , ) iferr!=nil{ log.Fatal(err) } resp,err:=client.Do(req) iferr!=nil{ log.Fatal(err) } content,err:=ioutil.ReadAll(resp.Body) iferr!=nil{ log.Fatal(err) }
二、golang通过反射将未知对象转换为array
funcinterfaceSlice(sliceinterface{})[]interface{}{ s:=reflect.ValueOf(slice) ifs.Kind()!=reflect.Slice{ panic("InterfaceSlice()givenanon-slicetype") } ret:=make([]interface{},s.Len()) fori:=0;i三、Mux获取GetQuery参数
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)))五、递归查找文件
funcreadAPK(pathstring,apkmap[string]int){ //fmt.Println("处理",path) files,_:=ioutil.ReadDir(path) for_,file:=rangefiles{ //fmt.Println(file.Name(),file.IsDir()) iffile.IsDir(){ readAPK(path+"/"+file.Name(),apk) }else{ ifstrings.Compare(file.Name(),"APK.log")==0{ ap:=make(map[string]string) body,err:=ioutil.ReadFile(path+"/"+file.Name()) iferr!=nil{ fmt.Printf("[%s]读取失败[%s]\n",file.Name(),err.Error()) return } err=json.Unmarshal(body,&ap) iferr!=nil{ fmt.Printf("[%s]解析失败[%s]\n",file.Name(),err.Error()) return } fora:=rangeap{ at:=strings.Split(ap[a],"|+|") for_,atemp:=rangeat{ info:=strings.Split(atemp,"|-|") iflen(info)>1{ header:=strings.Split(info[1],"") for_,h:=rangeheader{ ifstrings.Contains(h,"Referer:"){ u,err:=url.ParseRequestURI(h[8:]) iferr!=nil{ fmt.Println(err.Error()) }else{ apk[u.Host]++ } } } } } } } } } }六、解析Mongo已经存在的数据
typeAppstruct{ Idstring`json:"id"bson:"_id,omitempty"` User_idstring`bson:"user_id"` Namestring`bson:"name"` Domainstring`bson:"domain"` Business_linestring`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() iferr!=nil{ log.Println(err) } } }总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。