本文主要總結(jié)的是我在編寫(xiě)golang應(yīng)用時(shí)使用到的代碼片段,提供出來(lái)以備以后使用,也給需要的朋友們以參考學(xué)習(xí),下面話(huà)不多說(shuō),來(lái)看看詳細(xì)介紹:
一、通過(guò)http package發(fā)送user:passwd信息
發(fā)送類(lèi)似于 curl -u 的請(qǐng)求
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通過(guò)反射將未知對(duì)象轉(zhuǎn)換為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參數(shù)
vals := r.URL.Query()
oriDriver, ok := vals["driver"]
四、Mux 跨域訪(fǎng)問(wèn)代碼
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已經(jīng)存在的數(shù)據(jù)
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"`
}
重點(diǎn):
1.使用bson修飾符
2.各個(gè)flag直接使用空格分割
3._id和omitempty使用,分割。同時(shí)不能存在空格
七、定時(shí)器
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("下次采集時(shí)間為[%s]\n", next.Format("200601021504"))
select {
case -t.C:
err := sync.Gather()
if err != nil {
log.Println(err)
}
}
}
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
您可能感興趣的文章:- 詳解Golang 與python中的字符串反轉(zhuǎn)
- 深入理解golang的異常處理機(jī)制
- 在Golang代碼中如何自動(dòng)生成版本號(hào)的方法示例
- Golang中switch語(yǔ)句和select語(yǔ)句的用法教程
- golang之log rotate詳解
- Golang讀寫(xiě)Excel的方法教程
- 利用Golang如何調(diào)用Linux命令詳解
- Golang多線(xiàn)程刷票的實(shí)現(xiàn)代碼