7.蛤蟆笔记go语言——if,switch,defer
<span style="font-size:18px">7.蛤蟆笔记go语言——if,switch,defer</span>
<h1><span style="font-size:18px">if</span></h1><span style="font-size:18px">if 语句除了没有了 `( )` 之外(甚至强制不能使用它们),看起来跟 C 或者 Java 中的一样,而 `{ }` 是必须的。</span>
<span style="background:#D9D9D9"><span style="font-size:18px">package main</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">import (</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "fmt"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "math"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">)</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func sqrt(x float64) string {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> if x< 0 {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> returnsqrt(-x) "i"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> }</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> returnfmt.Sprint(math.Sqrt(x))</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func main() {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println(sqrt(2),sqrt(-4))</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="font-size:18px">执行:</span>
<span style="font-size:18px">1.4142135623730951 2i</span>
<span style="font-size:18px">跟 for 一样,`if` 语句可以在条件之前执行一个简单的语句。</span>
<span style="font-size:18px">由这个语句定义的变量的作用域仅在 if 范围之内。</span>
<span style="font-size:18px">(在最后的 return 语句处使用 v 看看。)</span>
<span style="background:#D9D9D9"><span style="font-size:18px">package main</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">import (</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "fmt"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "math"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">)</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func pow(x, n, lim float64) float64 {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> if v :=math.Pow(x, n); v < lim {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> returnv</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> }</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> returnlim</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func main() {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println(</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> pow(3,2, 10),</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> pow(3,3, 20),</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> )</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="font-size:18px">执行结果如下:</span>
<span style="font-size:18px"> 920</span>
<span style="font-size:18px">在 if 的便捷语句定义的变量同样可以在任何对应的 else 块中使用。</span>
<span style="background:#D9D9D9"><span style="font-size:18px">package main</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">import (</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "fmt"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "math"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">)</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func pow(x, n, lim float64) float64 {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> if v :=math.Pow(x, n); v < lim {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> returnv</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> } else{</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Printf("%g>= %g\n", v, lim)</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> }</span></span>
<span style="font-size:18px"><span style="background:#D9D9D9"> // </span> <span style="background:#D9D9D9">这里开始就不能使用</span><span style="background:#D9D9D9"> v </span><span style="background:#D9D9D9">了</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> returnlim</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func main() {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println(</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> pow(3,2, 10),</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> pow(3,3, 20),</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> )</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="font-size:18px">执行结果:</span>
<span style="font-size:18px"> 27>= 20</span>
<span style="font-size:18px"> 920</span>
<h1><span style="font-size:18px">switch</span></h1><span style="font-size:18px">一个结构体(`struct`)就是一个字段的集合。</span>
<span style="font-size:18px">除非以 fallthrough 语句结束,否则分支会自动终止。</span>
<span style="font-size:18px">执行:</span>
<span style="background:#D9D9D9"><span style="font-size:18px">package main</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">import (</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "fmt"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "runtime"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">)</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func main() {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Print("Goruns on ")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> switchos := runtime.GOOS; os {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> case"darwin":</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("OSX.")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> case"linux":</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("Linux.")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> default:</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> //freebsd, openbsd,</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> //plan9, windows...</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Printf("%s.",os)</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> }</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="font-size:18px">结果:</span>
<span style="font-size:18px"> Goruns on windows.</span>
<h1><span style="font-size:18px">switch 的执行顺序</span></h1><span style="font-size:18px">switch 的条件从上到下的执行,当匹配成功的时候停止。</span>
<span style="font-size:18px">(例如,</span>
<span style="font-size:18px">switch i {</span>
<span style="font-size:18px">case 0:</span>
<span style="font-size:18px">case f():</span>
<span style="font-size:18px">}</span>
<span style="font-size:18px">当 i==0 时不会调用 `f`。)</span>
<span style="font-size:18px">代码:</span>
<span style="background:#D9D9D9"><span style="font-size:18px">package main</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">import (</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "fmt"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "time"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">)</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func main() {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("When'sSaturday?")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> today:= time.Now().Weekday()</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> switchtime.Saturday {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> casetoday 0:</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("Today.")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> casetoday 1:</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("Tomorrow.")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> casetoday 2:</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("Intwo days.")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> default:</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("Toofar away.")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> }</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="font-size:18px">执行:</span>
<span style="font-size:18px"> When'sSaturday?</span>
<span style="font-size:18px"> Toofar away.</span>
<span style="font-size:18px">没有条件的 switch</span>
<span style="font-size:18px">没有条件的 switch 同 `switch true` 一样。</span>
<span style="font-size:18px">这一构造使得可以用更清晰的形式来编写长的 if-then-else 链。</span>
<span style="background:#D9D9D9"><span style="font-size:18px">package main</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">import (</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "fmt"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> "time"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">)</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func main() {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> t :=time.Now()</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> switch{</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> caset.Hour() < 12:</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("Goodmorning!")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> caset.Hour() < 17:</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("Goodafternoon.")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> default:</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("Goodevening.")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> }</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="font-size:18px">执行:</span>
<span style="font-size:18px"> Goodevening.</span>
<h1><span style="font-size:18px">defer</span></h1><span style="font-size:18px">defer 语句会延迟函数的执行直到上层函数返回。</span>
<span style="font-size:18px">延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用。</span>
<span style="font-size:18px">代码:</span>
<span style="background:#D9D9D9"><span style="font-size:18px">package main</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">import "fmt"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func main() {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> deferfmt.Println("world")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> </span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("hello")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="font-size:18px">执行如下:</span>
<span style="font-size:18px"> hello</span>
<span style="font-size:18px"> world</span>
<h2><span style="font-size:18px">defer 栈</span></h2><span style="font-size:18px">延迟的函数调用被压入一个栈中。当函数返回时,会按照后进先出的顺序调用被延迟的函数调用。</span>
<span style="font-size:18px">代码:</span>
<span style="background:#D9D9D9"><span style="font-size:18px">package main</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">import "fmt"</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">func main() {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("counting")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> for i:= 0; i < 10; i {</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> deferfmt.Println(i)</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> }</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px"> fmt.Println("done")</span></span>
<span style="background:#D9D9D9"><span style="font-size:18px">}</span></span>
<span style="font-size:18px">执行:</span>
<span style="font-size:18px">counting</span>
<span style="font-size:18px"> done</span>
<span style="font-size:18px"> 9</span>
<span style="font-size:18px"> 8</span>
<span style="font-size:18px"> 7</span>
<span style="font-size:18px"> 6</span>
<span style="font-size:18px"> 5</span>
<span style="font-size:18px"> 4</span>
<span style="font-size:18px"> 3</span>
<span style="font-size:18px"> 2</span>
<span style="font-size:18px"> 1</span>
<span style="font-size:18px"> 0</span>
<span style="font-size:18px"> </span>
<span style="font-size:18px"> </span>
<span style="font-size:18px"> </span>
<span style="font-size:18px"> </span>
到此这篇关于“7.蛤蟆笔记go语言——if,switch,defer”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
7.蛤蟆笔记go语言——if,switch,defer
用于管理iptables的shell脚本一例
js时间函数综合例子(日期计算、字符串转日期等)
go语言学习笔记(第3章)—面向对象编程
Golang 学习笔记:流程控制
12. Go 语言流程控制:defer 延迟语句
MySQL中group_concat函数使用例子
go学习(十二)——Go 语言错误与异常处理机制
php实现简单用户登录功能程序代码
Php入门教程之PHP 运算符用法说明