我在 golang 的 for 回圈中有一個未使用的變數。
我實際上是在 for 回圈之外使用它。
Goland 一直抱怨未使用的變數。
我該如何解決?
var backoffSchedule = []time.Duration{
1 * time.Second,
3 * time.Second,
10 * time.Second,
}
var response *http.Response
for _, backoff := range backoffSchedule {
response, err := client.Do(request)
if err == nil {
break
}
fmt.Printf(os.Stderr, "Request error: %s", err)
fmt.Printf(os.Stderr, "Retrying in %s", backoff)
time.Sleep(backoff)
}
if err != nil {
fmt.Printf("CRITICAL: API request failed: %s", err)
os.Exit(2)
}
if response.StatusCode <= 199 || response.StatusCode >= 300 {
// Non-successful response, alert
fmt.Printf("CRITICAL: APIv request returned not ok: %s", response.Status)
os.Exit(2)

它還抱怨未參考的變數err。我如何使它們在函式內可用。
uj5u.com熱心網友回復:
使錯誤消失的一種方法是err在回圈外宣告一個變數:
var err error
這樣,您可以在回圈內分配現有變數(而不是宣告新變數)
for _, backoff := range backoffSchedule {
response, err = client.Do(request)
^^^
確保這是您想要的,因為response在回圈之外,回圈中分配的最后一個值也是如此。
uj5u.com熱心網友回復:
您有兩個名為 的變數response,一個在回圈內,另一個在回圈外。
這是一個演示相同問題的示例。
package main
import (
"fmt"
)
func foo() (int, error) {
return 10, nil
}
func main() {
someValue := 5
if (someValue == 5) {
someValue, err := foo()
if (err == nil) {
fmt.Println("Inside if scope:", someValue)
}
}
fmt.Print("Outside if scope:", someValue)
}
這里的問題是您正在使用:=,默認情況下會創建一個新變數。
如果您err在范圍之外宣告并使用=您的代碼將起作用。
package main
import (
"fmt"
)
func foo() (int, error) {
return 10, nil
}
func main() {
someValue := 5
var err error
if (someValue == 5) {
someValue, err = foo()
if (err == nil) {
fmt.Println("Inside if scope:", someValue)
}
}
fmt.Print("Outside if scope:", someValue)
}
關于 go 行為的另一個注意事項是,如果您與已經存在的變數在同一范圍內,則它的作業方式會有所不同。
package main
import (
"fmt"
)
func foo() (int, error) {
return 10, nil
}
func main() {
someValue := 5
fmt.Println("Before foo:", someValue)
someValue, err := foo()
if (err == nil) {
fmt.Print("After foo:", someValue)
}
}
在這里,我們分配給相同的someValue變數err并同時宣告一個新變數:=。
uj5u.com熱心網友回復:
為了錯誤檢測,也許您也可以為response變數添加一個 nil 檢查。這可能是您的解決方案。對于等式。
if response== nil {
break
}
請分享您對這種情況的首選或發現的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/352536.html
標籤:走
