GO语言学习三(流程控制语句)
来源:互联网 发布:matlab高级编程基础 编辑:程序博客网 时间:2024/05/21 00:55
一、For循环
Go 只有一种循环结构—— for
循环
for循环包含三个由分号分开的组成部分:
初始化语句 : 第一次循环执行前被执行 可选
循环条件表达式 : 每次迭代开始前被求值:false or true 必须
后置语句:每次迭代后执行 可选
样例一 常用循环:
package mainimport "fmt"func main() {sum := 0for i := 0; i < 10; i++ {sum += i}fmt.Println(sum)}样例二 只保留循环条件表达式:
package mainimport "fmt"func main() {sum := 1for ; sum < 1000; {sum += sum}fmt.Println(sum)}样例三 死循环:
package mainfunc main() {for {}}
DEMO :
package mainimport "fmt"func main() {var i, j int//计算100以内的素数for i = 2; i < 100; i++ {for j = 2; j <= i/j; j++ {if i%j == 0 {break // 如果发现因子,则不是素数}}if j > (i / j) {fmt.Printf("%d 是素数\n", i)}}//字符串反转str := "hello world"arr := []rune(str)for i,j := 0,len(arr)-1;i<len(arr)/2;i,j = i+1,j-1{arr[i],arr[j] = arr[j],arr[i]}fmt.Println(string(arr))}
二、if
条件表达式
可以在条件之前执行一个简单语句,这个语句定义的变量的作用域仅在if范围之内
样例:
package mainimport ("fmt""math")func main() {/* 定义局部变量 */var a int = 10/* 使用 if 语句判断布尔表达式 */if a < 20 {/* 如果条件为 true 则执行以下语句 */fmt.Printf("a 小于 20\n")}fmt.Printf("a 的值为 : %d\n", a)fmt.Println(pow(2, 3, 10))fmt.Println(pow(3, 3, 20))}func pow(x, n, lim float64) float64 {//if 语句可以在条件之前执行一个简单语句if v := math.Pow(x, n); v < lim {return v} else {//在if的便捷语句定义的变量同样可以在任何对应的else块中使用fmt.Printf("%g >= %g\n", v, lim)}//这个地方就无法使用if中定义的变量vreturn lim}
DEMO:利用牛顿法 计算平方根
简化后 z = z/2 + x/2*z
/**练习:循环和函数作为练习函数和循环的简单途径,用牛顿法实现开方函数*/package mainimport ("fmt")func Sqrt(x float64) float64 {z := float64(1)for i := 0; i < 1e+5; i++ {z = z/2 + x/(2*z)}return z}func main() {fmt.Println(Sqrt(4))}
三、switch
switch 的条件从上到下的执行,当匹配成功的时候停止
没有条件的 switch 同 switch true
一样 相当于if-then-else
样例一:
package mainimport ("fmt""runtime")func main() {/* 定义局部变量 */var grade string = "B"var marks int = 90switch marks {case 90:grade = "A"case 80:grade = "B"case 50, 60, 70:grade = "C"default:grade = "D"}switch {case grade == "A":fmt.Printf("优秀!\n")case grade == "B", grade == "C":fmt.Printf("良好\n")case grade == "D":fmt.Printf("及格\n")case grade == "F":fmt.Printf("不及格\n")default:fmt.Printf("差\n")}fmt.Printf("你的等级是 %s\n", grade)fmt.Println(runtime.GOOS)switch os := runtime.GOOS; os {case "windows":fmt.Println("system is " + os)case "linux":fmt.Println("Linux.")default:fmt.Printf("%s.", os)}}
样例二:
package mainimport ("fmt""time")func main() {var x interface{}//switch 自上而下执行,当匹配成功的时候停止switch i := x.(type) {case nil:fmt.Printf(" x 的类型 :%T", i)case int:fmt.Printf("x 是 int 型")case float64:fmt.Printf("x 是 float64 型")case func(int) float64:fmt.Printf("x 是 func(int) 型")case bool, string:fmt.Printf("x 是 bool 或 string 型")default:fmt.Printf("未知型")}fmt.Println("When's Saturday?")today := time.Now().Weekday()switch time.Saturday {case today + 0:fmt.Println("Today.")case today + 1:fmt.Println("Tomorrow.")case today + 2:fmt.Println("In two days.")default:fmt.Println("Too far away.")}//没有条件的switch 相当于if-then-else链t := time.Now()switch {case t.Hour() < 12:fmt.Println("Good morning!")case t.Hour() < 17:fmt.Println("Good afternoon.")default:fmt.Println("Good evening.")}}
四、defer延时
defer 语句会延迟函数的执行直到上层函数返回
延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用
延迟的函数调用被压入一个栈中。当函数返回时, 会按照后进先出的顺序调用被延迟的函数调用
样例:
package mainimport "fmt"func main() {//defer语句会延时函数的执行知道上层函数返回。defer fmt.Println("world")fmt.Println("hello")i := 1//延时调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用//延时的函数调用被压入一个栈中。当函数返回时,会按照后进先出的顺序调用被延迟的函数调用defer fmt.Println(i)i++fmt.Println(i)}
阅读全文
0 0
- GO语言学习三(流程控制语句)
- Go语言学习(五)流程控制语句
- go语言(三)流程控制,函数
- Go语言学习(4)-流程控制
- GO语言学习-流程控制
- go语言学习-流程控制
- 学习Go语言,关于流程控制
- go语言学习笔记(8) 流程控制
- Go语言学习笔记(四)-控制语句
- [go语言]控制语句
- Go语言学习之流程控制(The way to go)
- JavaScript语言基础---(三)流程控制语句
- Go语言学习三 :循环语句
- go学习--控制语句
- go语言的控制语句
- 黑马程序员-C语言学习日记(三)流程控制
- Go语言学习笔记3——控制语句
- Go语言学习笔记(三) [控制结构、内建函数]
- golang设计模式(9)装饰模式
- sfilter文件驱动(二)--文件的关联
- linkedlist双向链表结构
- 【phpcms-v9】利用phpcms-v9站群功能建立多个分站
- Java 将数据库对应的表生成对应的实体类,包含注释信息
- GO语言学习三(流程控制语句)
- 字节、字、bit、bite的关系
- 命令行执行php文件面临的文件路径问题
- Mybatis中联表查询实现
- php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
- 入门Webpack,看这篇就够了
- 浏览器的渲染:过程与原理
- Android SharedPreferences存储数据与读取
- Android中全局获取Context