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