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

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

“for true {}”發生“函數末尾缺少返回值”

“for true {}”發生“函數末尾缺少返回值”

Go
滄海一幻覺 2023-05-08 17:52:09
看下面的兩個代碼片段:code1:func getIntJ1() (j int32) {    for {        j = 20        return    }}代碼2:func getIntJ2() (j int32) {    for true {        j = 20        return    }}游樂場:https://play.golang.org/p/ZnwjZDksZhu我認為他們應該在控制臺中打印相同的值20,但他們做不到我想要的??梢栽诳刂婆_code1打印值,但出現編譯錯誤:。 20code2missing return at end of function它們都有一個infinite loopin函數,為什么它們顯示不同的結果?
查看完整描述

2 回答

?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

為了防止函數在不返回其返回值的情況下運行結束,Go 有一個終止語句的概念。終止語句是某些類型的語句,可以很容易地表明執行不會繼續超過該語句。帶有結果參數的函數必須以終止語句結束。

沒有和for沒有break循環條件算作終止語句,但有for循環條件不算,即使該循環條件始終為真。(規則可以擴展為將forwithtrue作為終止語句的條件,但是添加太多情況會使定義更加混亂而不是有用。)您的第二個getIntJ定義沒有終止語句。


查看完整回答
反對 回復 2023-05-08
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

按照說明插入退貨。


package main


import (

    "fmt"

)


func main() {

    fmt.Println(getIntJ1())

    fmt.Println(getIntJ2())

}


func getIntJ1() (j int32) {

    for {

        j = 20

        if j == 21 {

            continue

        }

        return

    }

}


func getIntJ2() (j int32) {

    for true {

        j = 20

        if j == 21 {

            continue

        }

        return

    }

    return

}

游樂場:https://play.golang.org/p/QbYQ6NkOMpQ


輸出:


20

20

對于getIntJ1, for {},return永遠不需要。對于getIntJ2, for condition {},return可能需要。condition編譯器在什么時候可以更聰明true


for {}寫比寫更慣用for true {}。


查看完整回答
反對 回復 2023-05-08
  • 2 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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