go中的label來自于?C/C++的的goto(問了下公司寫C++的據(jù)說都不怎么用,容易導(dǎo)致程序運(yùn)行混亂)
它的作用用過來標(biāo)記某行;用goto 語(yǔ)句的時(shí)候,goto后邊需要跟個(gè)標(biāo)號(hào),就知道跳轉(zhuǎn)到哪一行;
例:
fmt.Println("皮卡丘")
goto KEDAYA
fmt.Println("火箭隊(duì)")
KEDAYA:
fmt.Println("可達(dá)鴨")
//上面代碼 執(zhí)行到goto KEDAYA時(shí)候? 直接跳到執(zhí)行fmt.Println("可達(dá)鴨")
注意:
1.在go語(yǔ)言中標(biāo)記了某行l(wèi)abel 就必須使用到,不然會(huì)報(bào)錯(cuò)
2.一般情況下使用Label的有g(shù)oto, continue,break,goto后面必須跟label的名稱???continue,break可以不用
continue 用法:
KEDAYA:
for i :=1; i <5; i++ {
if i ==3 {
continue KEDAYA
}
fmt.Println(i)
}
break 用法:
KEDAYA:
for i :=1; i <5; i++ {
if i ==3 {
break KEDAYA
}
fmt.Println(i)
}
(有一說一,這玩意兒感覺很雞肋,用了跟只用continue和break一樣 )
3.Label可以聲明在函數(shù)體的任何地方,作用范圍也就在函數(shù)體內(nèi)
4.嵌套函數(shù)的Label無法使用,外面的無法使用嵌套函數(shù)內(nèi)的label,嵌套函數(shù)內(nèi)也無法使用外面的label
5.不可以有兩個(gè)相同名字的label,label名區(qū)分大小寫的,label可以和變量名稱一樣(當(dāng)然你要跟變量重名的話,你可能被別的程序員打死)
6.goto必須在變量聲明之后,變量的聲明沒法被跳過