文章目錄
(一)for 循環
Go只有一個循環結構就是for循環,for循環有3個被分號分割的組成部分,分別是:
1,初始化語句
2,條件表達式
3,後聲明語句
所在位置情況是:for 初始化語句;條件表達式;後聲明語句
for循環的初始化語句是短變量聲明,並且這個變量聲明的作用域只在for循環語句中,當循環迭代的判斷條件變爲false後將會停止,不像C,Java,Js等語言的循環語句總是需要帶上括號 (),在Go中可以不寫括號
package main
import "fmt"
func main(){
var sum int = 0
for i:=0 ; i < 50 ; i++ {
sum+=i
}
fmt.Println("從0累加到49後的值爲:",sum)
}
(二)for循環知識擴展
在for循環中,初始化值和後聲明語句可以不寫,比如
for ;i<10; { }
package main
import "fmt"
func main(){
res := 10
for ;res<11; {
res *= res
}
fmt.Println(res)
}
(三)for就是Go的while循環
去掉分號的for循環就是go的while循環,和c的while循環效果是相似的
package main
import "fmt"
func main(){
res := 10
for res<100 {
res+=10
}
fmt.Println("res經過while循環後的結果爲:",res)
}
(四)死循環
如果for不設置循環條件,循環將會一直持續下去變成死循環
package main
import "fmt"
func main(){
for {
}
}
死循環導致運行超時
(五)if 語句
if 語句有些像for循環,表達式也不需要括號圓包括,但是花括號是必須的
package main
import (
"fmt"
"math"
)
func calcNum(x float64) float64 {
if x > 0 {
return math.Sqrt(x * 10)
}
return math.Sqrt(x)
}
func main() {
fmt.Println("\n計算的平方根爲:", calcNum(20), "\n")
}
(六)if 短聲明
像 for 一樣,if 聲明可以在條件之前執行短聲明,短聲明的變量的作用域僅僅直到 if 結束
package main
import (
"fmt"
)
func kok(x, y, con float64) float64 {
if v := x + y; v == con {
return v
}
return con
}
func main() {
fmt.Println(
kok(1, 2, 3),
"\n",
kok(10, 23, 2),
"\n",
)
}
(七)if…else 語句
變量可以在if 模塊裏面進行短聲明,也可以在else 裏面進行短聲明
package main
import(
"fmt"
"math"
)
func Alo(v int){
if v := math.Sqrt(v);v > 30{
fmt.Println("您的值求平方根後大於30得:",v)
}else {
math.Pow(v,v)
fmt.Println("您的值求平方根後小於30,根據else選擇我們選擇求平方,結果爲:",v)
}
}
func main(
Alo(10)
fmt.Printf()
)
(七)switch 選擇語句
switch是一種用較短的方法去寫if-else的聲明的方法,在Go語言中,swtich同樣沒有括號判斷,也沒有case判斷後的break關鍵字,case判斷完成後會自動跳出switch選擇 ,終止整個swicth
package main
import (
"fmt"
"runtime"
)
func main(){
switch os := runtime.GOOS; os{
case "darwin":
fmt.Println("您使用的操作系統爲OS X.")
case "windows":
fmt.Print("您使用的操作系統爲Windows")
case "Linux":
fmt.Print("您使用的操作系統爲Linux")
default :
fmt.Print("您使用的操作系統爲os")
}
}
使用switch配合runtime進行操作系統的信息檢測
(八)switch 無條件選擇
switch選擇不設置條件就相當於switch爲true,case結構就會變成if-else的模式
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
fmt.Printf("當前時間爲:%v", t)
switch {
case t.Hour() > 10 && t.Hour() < 22:
fmt.Println("當前時間位於10點-22點")
case t.Hour() >= 22:
fmt.Println("已經22點以後了,夜已深,早點休息")
}
}
(九)defer
defer 關鍵字的使用可以是一個函數被延遲,直到被延遲函數的周圍函數都執行完
package main
import "fmt"
func main(){
defer fmt.Println("你好!")
fmt.Println("還行!")
}
如果有多個defer定義,順序該怎麼執行?
如果存在多個defer,執行順序爲從後到前,誰最先被defer定義, 誰就最後輸出
前看演示:
package main
import "fmt"
func main() {
fmt.Println("0!")
defer fmt.Println("1!")
defer fmt.Println("2!")
defer fmt.Println("3!")
fmt.Println("4!")
}
輸出結果爲:0,4,3,2,1
以上示例說明 Go的defer會造成一個堆棧的後進先出(last-in-first-out)順序,再看一個實例演示便更理解這種順序
package main
import "fmt"
func main(){
for i := 0;i < 10 ;i++ {
defer fmt.Print("當前是第",i,"個數")
}
fmt.Print("開始數數!")
}