Golang開發(fā)中常用的代碼片段匯總
本文主要總結(jié)的是我在編寫golang應(yīng)用時使用到的代碼片段,提供出來以備以后使用,也給需要的朋友們以參考學(xué)習(xí),下面話不多說,來看看詳細(xì)介紹:
一、通過http package發(fā)送user:passwd信息
發(fā)送類似于 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通過反射將未知對象轉(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 跨域訪問代碼
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"`
}
重點:
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)
}
}
}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Golang中g(shù)oroutine和channel使用介紹深入分析
一次只做一件事情并不是完成任務(wù)最快的方法,一些大的任務(wù)可以拆解成若干個小任務(wù),goroutine可以讓程序同時處理幾個不同的任務(wù),goroutine使用channel來協(xié)調(diào)它們的工作,channel允許goroutine互相發(fā)送數(shù)據(jù)并同步,這樣一個goroutine就不會領(lǐng)先于另一個goroutine2023-01-01
Go語言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例
這篇文章主要為大家介紹了Go語言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12

