7.蛤蟆筆記go語言——if,switch,defer

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

7.蛤蟆筆記go語言——if,switch,defer

if

if 語句除了沒有了 `( )` 之外(甚至強制不能使用它們),看起來跟 C 或者 Java 中的一樣,而 `{ }` 是必須的。

package main

import (

         "fmt"

         "math"

)

func sqrt(x float64) string {

         if x< 0 {

                   returnsqrt(-x) + "i"

         }

         returnfmt.Sprint(math.Sqrt(x))

}

func main() {

         fmt.Println(sqrt(2),sqrt(-4))

}

執行:

1.4142135623730951 2i

跟 for 一樣,`if` 語句可以在條件之前執行一個簡單的語句。

由這個語句定義的變數的範圍僅在 if 範圍之內。

(在最後的 return 語句處使用 v 看看。)

package main

import (

         "fmt"

         "math"

)

func pow(x, n, lim float64) float64 {

         if v :=math.Pow(x, n); v < lim {

                   returnv

         }

         returnlim

}

func main() {

         fmt.Println(

                   pow(3,2, 10),

                   pow(3,3, 20),

         )

}

執行結果如下:

         920

在 if 的便捷語句定義的變數同樣可以在任何對應的 else 塊中使用。

package main

import (

         "fmt"

         "math"

)

func pow(x, n, lim float64) float64 {

         if v :=math.Pow(x, n); v < lim {

                   returnv

         } else{

                   fmt.Printf("%g>= %g\n", v, lim)

         }

         // 這裡開始就不能使用 v了

         returnlim

}

func main() {

         fmt.Println(

                   pow(3,2, 10),

                   pow(3,3, 20),

         )

}

執行結果:

         27>= 20

         920

switch

一個結構體(`struct`)就是一個欄位的集合。

除非以 fallthrough 語句結束,否則分支會自動終止。

執行:

package main

import (

         "fmt"

         "runtime"

)

func main() {

         fmt.Print("Goruns on ")

         switchos := runtime.GOOS; os {

         case"darwin":

                   fmt.Println("OSX.")

         case"linux":

                   fmt.Println("Linux.")

         default:

                   //freebsd, openbsd,

                   //plan9, windows...

                   fmt.Printf("%s.",os)

         }

}

結果:

         Goruns on windows.

switch 的執行順序

switch 的條件從上到下的執行,當匹配成功的時候停止。

(例如,

switch i {

case 0:

case f():

}

當 i==0 時不會調用 `f`。)

代碼:

package main

import (

         "fmt"

         "time"

)

func main() {

         fmt.Println("When'sSaturday?")

         today:= time.Now().Weekday()

         switchtime.Saturday {

         casetoday + 0:

                   fmt.Println("Today.")

         casetoday + 1:

                   fmt.Println("Tomorrow.")

         casetoday + 2:

                   fmt.Println("Intwo days.")

         default:

                   fmt.Println("Toofar away.")

         }

}

執行:

         When'sSaturday?

         Toofar away.

沒有條件的 switch

沒有條件的 switch 同 `switch true` 一樣。

這一構造使得可以用更清晰的形式來編寫長的 if-then-else 鏈。

package main

import (

         "fmt"

         "time"

)

func main() {

         t :=time.Now()

         switch{

         caset.Hour() < 12:

                   fmt.Println("Goodmorning!")

         caset.Hour() < 17:

                   fmt.Println("Goodafternoon.")

         default:

                   fmt.Println("Goodevening.")

         }

}

執行:

         Goodevening.

defer

defer 語句會延遲函數的執行直到上層函數返回。

延遲調用的參數會立刻產生,但是在上層函數返回前函數都不會被調用。

代碼:

package main

import "fmt"

func main() {

         deferfmt.Println("world")

 

         fmt.Println("hello")

}

執行如下:

         hello

         world

defer 棧

延遲的函數調用被壓入一個棧中。當函數返回時,會按照後進先出的順序調用被延遲的函數調用。

代碼:

package main

import "fmt"

func main() {

         fmt.Println("counting")

         for i:= 0; i < 10; i++ {

                   deferfmt.Println(i)

         }

         fmt.Println("done")

}

執行:

counting

         done

         9

         8

         7

         6

         5

         4

         3

         2

         1

         0

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.