亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 沒有將完整的數據寫入文本文件

Go 沒有將完整的數據寫入文本文件

Go
慕妹3146593 2022-04-20 21:06:13
我正在嘗試探索 Go 并發性。這里Grabber()打印并寫入執行結果。程序打印預期結果,但不將其寫入urls.txt. 誰能向我解釋我在這里缺少什么?main.gopackage mainimport (    "bufio"    "fmt"    "io/ioutil"    "log"    "net/http"    "os"    "regexp"    "strings"    "sync")var wg sync.WaitGroupvar mt sync.Mutex// Final Literationfunc main() {    file, err := os.Open("ip.txt")    if err != nil {        log.Fatal(err)    }    defer file.Close()    scanner := bufio.NewScanner(file)    for scanner.Scan() {        go Grabber(scanner.Text())        wg.Add(1)    }    wg.Wait()    if err := scanner.Err(); err != nil {        log.Fatal(err)    }}// stringInArray do If string in list return true false otherwise.func stringInArray(a string, list []string) bool {    for _, b := range list {        if b == a {            return true        }    }    return false}// Grabber Do Search the bing and collect array of sitelistfunc Grabber(ip string) {    defer wg.Done()    var output []string    outfile, err := os.Create("urls.txt")    if err != nil {        log.Fatal(err)    }    defer outfile.Close()    if ip == "" {    }    page := 1    for page < 251 {        client := &http.Client{}        req, err := http.NewRequest(            http.MethodGet,            fmt.Sprintf(                "http://www.bing.com/search?q=ip:%s+&count=50&first=1",                ip,            ),            nil,        )        if err != nil {        }        req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:57.0) Gecko/20100101 Firefox/57.0")        res, err := client.Do(req)        if err != nil {            fmt.Println("Invalid Request")        }        defer res.Body.Close()        body, err := ioutil.ReadAll(res.Body)        if err != nil {            fmt.Println("Couldn't Read")        }ip.txt 作為輸入103.253.145.129103.253.146.125103.253.146.239103.253.147.72146.185.176.79146.185.176.45146.185.179.250146.185.180.35146.185.180.185146.185.180.113146.185.181.51146.185.183.107146.185.183.202146.185.183.248146.185.183.219146.185.184.69146.185.185.169
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

您正在調用create每個 goroutine,這將截斷文件。相反,在外部創建文件,并使用另一個 goroutine 序列化對其的寫入:


    outfile, err := os.Create("urls.txt")

    results:=make(chan []string)

    go func() {

       for output:=range results { 

          for _, links := range output {

            fmt.Fprintln(outfile, links)

          }      

       }

    }()


    scanner := bufio.NewScanner(file)

    for scanner.Scan() {

        go Grabber(scanner.Text(), results)

        wg.Add(1)


    }

    wg.Wait()

    close(results)

在 Grabber 中獲取結果時,不要將其寫入文件,而是將其寫入通道:


    results<-output

    for _, links := range output {

        fmt.Println(links)

    }


查看完整回答
反對 回復 2022-04-20
  • 1 回答
  • 0 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號