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 关注
- 214 浏览
添加回答
举报