Golang開發(fā)中常用的代碼片段匯總
本文主要總結(jié)的是我在編寫golang應(yīng)用時(shí)使用到的代碼片段,提供出來(lái)以備以后使用,也給需要的朋友們以參考學(xué)習(xí),下面話不多說,來(lái)看看詳細(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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Golang內(nèi)存對(duì)齊的規(guī)則及實(shí)現(xiàn)
本文介紹了Golang內(nèi)存對(duì)齊的規(guī)則及實(shí)現(xiàn),通過合理的內(nèi)存對(duì)齊,可以提高程序的執(zhí)行效率和性能,通過對(duì)本文的閱讀,讀者可以更好地理解Golang內(nèi)存對(duì)齊的原理和技巧,并應(yīng)用于實(shí)際編程中2023-08-08
golang常用庫(kù)之字段參數(shù)驗(yàn)證庫(kù)-validator使用詳解
這篇文章主要介紹了golang常用庫(kù):字段參數(shù)驗(yàn)證庫(kù)-validator使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借價(jià)值,需要的朋友可以參考下2020-10-10
golang?日志庫(kù)ZAP[uber-go?zap]示例詳解
Golang安裝和使用protocol-buffer流程介紹

