Go最新Go官方指南(二)流程控制语句,Golang源码的Binder权限是如何控制

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

import (
“fmt”
“math”
)
// 数字的几次幂
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
}
//return v //在这里使用 v 的话,会出现错误,v 未定义
return lim
}

func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 3, 20),
)
}


### if 和 else


在 `if` 的简短语句中声明的变量同样可以在任何对应的 `else` 块中使用。



package main

import (
“fmt”
“math”
)

func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf(“%g >= %g\n”, v, lim)
}
// 这里开始就不能使用 v 了
return lim
}

func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 3, 20),
)
}


### switch


`switch` 是编写一连串 `if - else` 语句的简便方法。它运行第一个值等于条件表达式的 case 语句。


Go 的 switch 语句类似于 C、C++、Java、JavaScript 和 PHP 中的,不过 Go 只运行选定的 case,而非之后所有的 case。 实际上,Go 自动提供了在这些语言中每个 case 后面所需的 `break` 语句。 除非以 `fallthrough` 语句结束,否则分支会自动终止。 Go 的另一点重要的不同在于 switch 的 case 无需为常量,且取值不必为整数。



package main

import (
“fmt”
“runtime”
)

func main() {
fmt.Print(“Go runs on “)
switch os := runtime.GOOS; os {
case “darwin”:
fmt.Println(“OS X.”)
case “linux”:
fmt.Println(“Linux.”)
default:
// freebsd, openbsd,
// plan9, windows…
fmt.Printf(”%s.\n”, os)
}
}


### switch 的求值顺序


switch 的 case 语句从上到下顺次执行,直到匹配成功时停止。


(例如,



switch i {
case 0:
case f():
}


在 `i==0` 时 `f` 不会被调用。)




package main

import (
“fmt”
“time”
)

func main() {
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


没有条件的 switch 同 `switch true` 一样。


这种形式能将一长串 if-then-else 写得更加清晰。



package main

import (
“fmt”
“time”
)

func main() {
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 main

import “fmt”

func main() {
defer fmt.Println(“world”)

fmt.Println("hello")

}


### defer 栈


推迟的函数调用会被压入一个栈中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。



package main

import “fmt”

func main() {
fmt.Println(“counting”)

for i := 0; i < 10; i++ {
	defer fmt.Println(i)
}

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

715838254635)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值