程序 = 数据结构 + 算法
上面这个等式每一个初学编程的同学都从老师那里听说过。它并不是什么严格的数据公式,它只是对一般程序的简单认知。数据结构是内存数据关系的静态表示,算法是数据结构从一个状态变化到另一个状态需要执行的机器指令序列。数据结构是静态的,算法是动态的。数据结构是状态,算法是状态的变化。
![图片 640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/8353adfeb97a3c0f77f3b4d73222bea3.png)
上一节我们讲的变量,它是数据结构的最小单位,本节我们要讲的分支与循环,它是算法逻辑的最小单位。
Go 语言的分支循环语句选择性较少,循环语句它只有 for 循环,平时我们在其它语言用的 while 语句、do while 语句、loop 语句它是没有的。分支语句只有 if 和 switch,也没有三元操作符。
少并不是坏事,够用就行。语法糖丰富了表面上选择性多了功能强大了,但是也会增加代码的理解成本,用户需要掌握更多的知识才可以理解代码,这会提高语言的学习门槛。一个经验丰富的编程老鸟总是会倾向于用最简单的代码来写出易于理解的程序来,偏方窍门奇技淫巧那是初学者膜拜的对象。
if else 语句
下面我们使用 if else 语句编写一个最大函数 max 、最小函数 min 和 正负符号函数 sign。这个例子中我们要第一次引入用户自定义的函数。
package main
import "fmt"
func main() {
fmt.Println(sign(max(min(24, 42), max(24, 42))))
}
func max(a int, b int) int {
if a > b {
return a
}
return b
}
func min(a int, b int) int {
if a < b {
return a
}
return b
}
func sign(a int) int {
if a > 0 {
return 1
} else if a < 0 {
return -1
} else {
return 0
}
}
------------
1
switch 语句
哪种语言没有 switch 语句?我所知道的只有 Python 语言,在 Python 里面你需要编写很多的 if else 分支语句来达到 switch 的效果。Go 语言提供了 switch 语句,下面我们使用 switch 语句来编写一个简单的评分函数。switch 有两种匹配模式,一种是变量值匹配,一种是表达式匹配。
package main
import "fmt"
func main() {
fmt.Println(prize1(60))
fmt.Println(prize2(60))
}
// 值匹配
func prize1(score int) string {
switch score / 10 {
case 0, 1, 2, 3, 4, 5:
return "差"
case 6, 7:
return "及格"
case 8:
return "良"
default:
return "优"
}
}
// 表达式匹配
func prize2(score int) string {
// 注意 switch 后面什么也没有
switch {
case score < 60:
return "差"
case score < 80:
return "及格"
case score < 90:
return "良"
default:
return "优"
}
}
for 循环
Go 语言虽然没有提供 while 和 do while 语句,不过这两个语句都可以使用 for 循环的形式来模拟。我们平时使用 while 语句来写死循环 while(true) {},Go 语言可以这么写
package main
import "fmt"
func main() {
for {
fmt.Println("hello world!")
}
}
package main
import "fmt"
func main() {
for true {
fmt.Println("hello world!")
}
}
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println("hello world!")
}
}
for 语句配合 range 关键字还能玩出更多新花样,这个我们会在后面章节陆续讲解
循环控制
Go 语言支持 continue 和 break 语句来控制循环,这两个语句和其它语言没什么特殊的区别。除此之外 Go 语言还支持 goto 语句。计算机科学家迪杰斯特拉很讨厌 goto 语句,他的那片广为流传的论文《Goto 有害》已经家喻户晓般地为人所知,可是他已经去世这么多年了,很遗憾还是没能阻挡 goto 语句死灰复燃般地继续存在。
![图片 640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/ac0d7089fd5d79f397373e8c515c6d92.jpeg)
我们作为普通用户平时还是尽量不要使用 goto 语句了,不论是谁来 review 你的代码只要是看到了 goto 语句肯定会发发牢骚的。
下一节我们开讲 Go 语言重要的特殊数据类型 —— 数组与切片
![图片 640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/fc93534dac656113f68953850b815e37.jpeg)
阅读更多有趣文章,欢迎关注公众号「码洞」