3 回答

TA貢獻1866條經驗 獲得超5個贊
您有一個匿名函數作為參數傳遞給req.Pages(). 您不能return在函數文字內使用語句從外部函數返回。內部函數有error返回類型,這就是為什么你不能bool從它返回,只有error.
處理此問題的一種方法是在內部函數外部聲明一個局部變量,并在內部函數內部分配您希望從外部函數返回的值,因此外部函數可以做到這一點:返回分配的值內在功能。方便的是,這可能是結果參數本身:命名返回類型。
func checkIfRouteExists(ctx context.Context, req *compute.RoutesListCall, IP string) (result bool) {
if err := req.Pages(ctx, func(page *compute.RouteList) error {
for _, route := range page.Items {
matched, _ := regexp.MatchString(IP , route.DestRange)
if matched {
log.Printf("IP %v has matched", IP)
result = true
return nil
}
}
return nil
}); err != nil {
log.Fatal(err)
}
return // This returns what's currently in the result variable
}

TA貢獻1804條經驗 獲得超8個贊
您可以在外部函數中聲明一個變量并從匿名函數中設置它,以便它知道返回什么:
func checkIfRouteExists(ctx context.Context, req *compute.RoutesListCall, IP string) bool {
var matched bool
if err := req.Pages(ctx, func(page *compute.RouteList) error {
for _, route := range page.Items {
matched, _ = regexp.MatchString(IP , route.DestRange)
if matched {
log.Printf("IP %v has matched", IP)
return nil
}
}
return nil
}); err != nil {
log.Fatal(err)
}
return matched
}

TA貢獻1829條經驗 獲得超7個贊
您的函數正在調用另一個函數,而另一個函數 ( func(page *compute.RouteList) error) 返回錯誤。
您可以檢查此錯誤是否為零(沒有錯誤,一切正常),如果沒有匹配則返回錯誤:
func checkIfRouteExists(ctx context.Context, req *compute.RoutesListCall, IP string) bool {
hasMatchingError := req.Pages(ctx, func(page *compute.RouteList) error {
for _, route := range page.Items {
matched, _ := regexp.MatchString(IP , route.DestRange)
if matched {
log.Printf("IP %v has matched", IP)
return nil
}
}
return errors.New(`No match found`)
})
if hasMatchingError != nil {
log.Fatal(hasMatchingError)
}
return hasMatchingError == nil
}
- 3 回答
- 0 關注
- 204 瀏覽
添加回答
舉報