2016-01-13 11 views
-4

我直觀的方法: https://play.golang.org/p/6xzg7TK1IH「已宣告但尚未使用的」變量對的條件表達式

,它不工作。

你能分享一些替代方法嗎?

+0

如果變量不需要使用下劃線https://play.golang.org/p/S9kzv_dBlk – pkuderov

+5

複製的http://stackoverflow.com/questions/21743841/how-to-avoid-annoying-error-宣和 - 不使用的 - 從 - golang。有一個很好的解釋,爲什麼去語言創建者添加此檢查。 – pkuderov

回答

1

您使用:=其丟棄變量的以前的內容。您不在該範圍中使用morelines,因此出現錯誤消息。

如果您事先聲明瞭變量並且不使用:=,它可以正常工作。函數ReadLine()可能不會做你認爲應該做的事。

package main 

import (
    "bufio" 
    "fmt" 
    "log" 
    "os" 
) 

func main() { 
    bio := bufio.NewReader(os.Stdin) 
    var line []byte 
    var err error 
    moreline := true 
    for moreline { 
     line, moreline, err = bio.ReadLine() 
     if err != nil { 
      log.Fatal(err) 
     } 
     fmt.Println(line) 
    } 
} 
2

您正在聲明一個您不使用它的變量(moreline)。這裏有兩種選擇:要麼用下劃線替換moreline,這意味着你可以省略返回值。

for moreline { 
     line, _, err := bio.ReadLine() 
     if err != nil { 
       log.Fatal(err) 
     } 
     fmt.Println(line) 
} 

但是一個更好的選擇將是使用ReadScannerReadBytes('\n')ReadString('\n')

檢查bufio.go文件這就是你作爲ReadLine方法描述:

的ReadLine是一個低級別的在線閱讀原始。大多數呼叫者應該使用ReadBytes('\ n')或ReadString('\ n')代替或使用掃描器。

調用UnreadByteReadLine永遠讀讀取的最後一個字節(可能屬於行結束字符),即使該字節是不是ReadLine返回線的一部分。 ReadLine要麼返回一個非零線,要麼返回一個錯誤,從來都不是。

因此,這將是一個更好的選擇:

scanner := bufio.NewScanner(bio) 

for scanner.Scan() { 
    line := scanner.Text() 
    fmt.Printf("%v\n", line) 
}