循環(huán)結構
Go中只存在一種循環(huán)結構-for循環(huán)猎醇∷骋基本的for循環(huán)由三部分組成:
- 初始化語句:第一次迭代前執(zhí)行
- 條件表達式:每次迭代前執(zhí)行
- 后置語句:每次迭代后執(zhí)行
Go的for循環(huán)語句后面不需要小括號包裹,但是必須存在大括號劲装。此外胧沫,初始化語句與后置語句可以省略,因為Go中的for等價于C中的while占业,一次當我們寫無限循環(huán)時可以忽略條件表達式绒怨,將for循環(huán)寫到很緊湊的程度,例如:
package main
import "fmt"
func main(){
for{//無線循環(huán)
fmt.Println("Hello World");
}
}
if
Go的if語句與for相似,不需要括號谦疾,但是必須存在大括號窖逗。與其他語言中的if語句不通的是Go中的if可以在表達式之前執(zhí)行一個簡單的語句,而該語句中聲明的變量只能在if之中餐蔬,可以參考如下代碼:
package main
import(
"fmt"
"math"
)
func pow(x,y,max float64) float64{
if v := math.Pow(x,y); v<max{
return v
}else{
fmt.Println("%g >= %g",v,max)
}
return max
}
func main(){
fmt.Println(
pow(3,2,10),
pow(3,3,20),
)
}
從上述代碼中我們可以看出碎紊,if語句表達式之前的簡單語句需要以分號與條件語句隔開佑附。
switch
同理switch語句與其他語句的差別也是在條件一句前可以存在簡單語句且以分好隔開,不需要小括號而是必須存在大括號仗考。特別需要說明的是which語句只有當以fallthrough語句結束時才能繼續(xù)執(zhí)行下一個case否則將直接結束分支音同。switch語句頁可以不存在條件語句,此時等同于if-then-else結構秃嗜。代碼如下:
package main
import (
"fmt"
"time"
)
func main(){
t := time.Now()
switch{
case t.Hour() <12 :
fmt.Println("Good Morning")
case t.Hour() <17 :
fmt.Println("Good Afternoon")
fallthrough
default:
fmt.Println("Good Evening")
}
}
我寫代碼的時候是下午15點权均,因此執(zhí)行之后會輸出”Good Afternoon”與”Good Evning”兩條語句。
defer
defer語句會將函數(shù)推遲到外層函數(shù)返回之后執(zhí)行锅锨。推遲調用的函數(shù)其參數(shù)會立即求值叽赊,但直到外層函數(shù)返回前該函數(shù)都不會被調用。推遲的函數(shù)調用會被壓入一個棧中必搞。當外層函數(shù)返回時必指,被推遲的函數(shù)會按照后進先出的順序調用。