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

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

如果滿足條件,則返回 true

如果滿足條件,則返回 true

Go
Cats萌萌 2022-05-05 18:11:08
我有一個功能func checkIfRouteExists(ctx context.Context, req *compute.RoutesListCall, IP string) 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    }); err != nil {        log.Fatal(err)    }}該函數將上下文作為參數來連接到 GCP(谷歌云平臺)和 IP。它獲取 IP 并比較該 IP 在 GCP 中是否可用。如果發生匹配,我希望整個函數返回true如果我做類似的事情if matched {    log.Printf("IP %v has matched", IP)    return true}它抱怨說Cannot use 'true' (type bool) as type error Type does not implement 'error' as some methods are missing: Error() string 如果我放在return true函數的末尾,它基本上對所有內容都返回 true。我究竟可以把返回值放在哪里,以便函數只有在我有 IP 匹配時才返回 true ?
查看完整描述

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

}


查看完整回答
反對 回復 2022-05-05
?
胡說叔叔

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

}


查看完整回答
反對 回復 2022-05-05
?
千巷貓影

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

}


查看完整回答
反對 回復 2022-05-05
  • 3 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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