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