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

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

golang通過FTP上傳,同時獲取FTP進度

golang通過FTP上傳,同時獲取FTP進度

Go
狐的傳說 2022-01-17 10:12:28
我使用http://github.com/dutchcoders/goftp通過 FTP 發送文件。它可以正常工作,但是當我想上傳文件并獲取該文件信息時(同時)它不起作用!fileName := "sth"var err errorvar ftp *goftp.FTPif ftp, err = goftp.Connect("serverip:port"); err != nil {    fmt.Println(err)}defer ftp.Close()config := tls.Config{    InsecureSkipVerify: true,    ClientAuth:         tls.RequestClientCert,}if err = ftp.AuthTLS(config); err != nil {    //      log.Println("1", err)}if err = ftp.Login("userName", "pass"); err != nil {    log.Println("2", err)}//if err = ftp.Cwd("/home/myDir/"); err != nil {    log.Println("3", err)}var file *os.Fileif file, err = os.Open(fileName); err != nil {    log.Println("6", err)}defer file.Close()fmt.Println("start")go func() {    fmt.Println("first")    nmp := ftp.Stor(fileName, file)    if nmp != nil {        log.Println("7", err)    } else {        fmt.Println("first is runung")    }}()go func() {    fmt.Println("second")    for {        files, nms := ftp.List(fileName)        if nms == nil {            fmt.Println(files)        }        time.Sleep(1 * time.Second)    }}()fmt.Println("end")var mnmn stringfmt.Scan(&mnmn)ftp.Stor func 不會運行,我的代碼返回以下輸出:startendfirstsecond2016/05/31 13:21:38 7 <nil>[][]
查看完整描述

1 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

目前,這兩個 goroutine 都有相同的 ftp 實例(var ftp *goftp.FTP),它們相互阻塞,因為它們有競爭條件。你的結果是不可預測的。有時,它在第一次正確執行時會給出正確的結果?;蛘弋斔却诙€然后完全運行時?;蛘弋?first 不執行時。否則,兩個 go 例程都會相互阻塞。解決方案:

  • 您使用兩個不同的 ftp 實例來為 goroutine 提供不同的連接

    var ftp,ftp1 *goftp.FTP

喜歡這里玩 Golang 或

  • 在 main go 例程中首先有 *goftp 存儲。然后開始其他 goroutine。但這會破壞第二次圍棋例程的目的。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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