Go 语言初探(二)
书接上回,咱接着讲 Go 的一些内容。
循环
for 语句
只有一种写法,和 matlab 有点像,不用写圆括号。
1 | sum := 0 |
Go 里面没有 while 循环,直接用 for 可以达到相同的效果。个人觉得这个设计还是可以的,省掉一个关键字
1 | sum := 1 |
死循环
死循环可以这么写,算是语法糖?
1 | for { |
条件语句
if 基本使用
同 for 一样,条件不需要用圆括号,但必须要有花括弧
1 | if x < 0 { |
if 便捷使用
if 语句前可以加一个语句,而且作用域只在 if 范围内
1 | if v:=math.Pow(x, n); v < slim { |
switch 基本使用
在 C/C++ 里面的 switch 是需要 break 语句结束在 switch 中的条件。但 Go 中不需要,默认就是直接跳出。
1 | switch os := runtime.GOOS; os { |
如果需要实现 C/C++ 中连续执行的效果,则需要使用 fallthrough
结束
1 | var v uint32 |
switch 替代 if-else 链
我个人很喜欢这个特性,不用写一堆的 if - else if - else
1 | switch { |
defer 语句
defer 语句会延迟函数的执行知道上层函数返回。这个特性最开始的时候我没想出使用的场景。搜了一下原来可以用在文件的打开和关闭上。麻麻再也不用担心资源没有释放了。某种意义上算是减轻了程序员的心智负担。
1 | f, err := os.Create("test.txt") |
实际上 defer 的函数会被压入一个栈中,会按照后进先出的顺序被调用。更多关于 defer 的信息参考这里
指针
雾草,Go 不是说好的现代语言么,为什么还有指针这种淫荡的货色。我仍旧没有忘记 C/C++ 中被指针支配的恐惧。
1 | i, j := 42, 2701 |
哦原来没有指针运算的,其实就是引用的意思,吓死宝宝了。