美文网首页
Go基础笔记

Go基础笔记

作者: csr_yang | 来源:发表于2018-05-23 14:44 被阅读7次

Go语言基础(一)

流程控制语句:for、if、else、switch、defer

for

Go只有一种循环结构: for 循环
基本的for循环由三部分组成,它们用分号隔开:

  • 初始化语句:在第一次迭代前执行
  • 条件表达式:在每次迭代前求值
  • 后置语句:在每次迭代的结尾执行

一个标准的for循环:

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

初始化语句通常为一句短变量声明,该变量声明仅在for语句的作用域中可见。
一旦条件表达式的布尔值为false,循环迭代就会终止。
Go的for语句后面没有小括号,大括号{}是必须的

初始化语句和后置语句是可选的。

func main() {
    sum := 1
    for ; sum < 1000; {
        sum += sum
    }
    fmt.Println(sum)
}

for是Go中的while,此时可以去掉分号。

func main() {
    sum := 1
    for sum < 1000 {
        sum += sum
    }
    fmt.Println(sum)
}

无限循环

如果省略循环条件,该循环就不会结束,因此无限循环可以用以下写法

func main() {
    for {
    }
}

if

Go的if语句与for循环类似,表达式外无需小括号(),而大括号{}是必须的

func sqrt(x float64) string {
    if x < 0 {
        return sqrt(-x) + "i"
    }
    return fmt.Sprint(math.Sqrt(x))
}

if的简短语句

同for一样,if语句可以在条件表达式前执行一个简单的语句。
该语句声明的变量作用域仅在if之内
if之外使用报错,如下

image

if和else

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


image

switch

switch是编写一连串if-else语句的简便写法。它运行第一个值等于条件表达式的case语句。
Go的switch语句类似于C、C++、Java、Javascript和PHP中的,不过Go只运行选定的case,而非之后所有的case。实际上,Go自动提供了在这些语言中每个case后面所需的break语句。除非以fallthrough语句结束,否则分支会自动终止。Go的另一点重要的不同在于switch的case无需为常量,且取值不必为整数

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.", os)
    }
}

switch的求值顺序

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

没有条件的switch

没有条件的switch同switch true一样。
这种形式能将一长串if-then-else写得更加清晰。

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语句会将函数推迟到外层函数返回之后执行。
推迟调用的函数其参数会立即求值,但直到外层函数返回前该函数都不会被调用。

func main() {
    defer fmt.Println("world")

    fmt.Println("hello")
}

defer栈

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

func main() {
    fmt.Println("counting")

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

    fmt.Println("done")
}

result:
counting
done
9
8
7
6
5
4
3
2
1
0

相关文章

  • go http学习笔记

    go http学习笔记 @[goweb, go, http] 1.go http基础 go http服务器简例 h...

  • Go基础笔记

    Go语言基础(一) 流程控制语句:for、if、else、switch、defer for Go只有一种循环结构:...

  • go 基础学习

    1 go 基础go 语法基础go 官方资料如果由C ,C++ 基础, 学习go 比较容易,本文学习go ,主要是为...

  • Go语言开发资料收集

    【Go 边看边练 -《Go 学习笔记》】系列Go 边看边练 -《Go 学习笔记》系列(一)- 变量、常量Go 边看...

  • go语言基础

    go语言基础 go 语言接口

  • GO——学习笔记(五)

    上篇:GO——学习笔记(四) 下篇:GO——学习笔记(六) 示例代码——go_4 https://github.c...

  • Golang资料整理

    视频 郝林-Go语言第一课 Go编程基础 Go Web 基础 Go名库讲解 社区 官网要翻墙 Github--Go...

  • Golang 学习笔记(01)—— 基础

    本文为转载,原文:Golang 学习笔记(01)—— 基础 Golang介绍 Go语言是由Google开发的一个开...

  • go编程基础视频笔记-Go基础知识

    Go内置关键字(25个均为小写) break default func interface selectecase...

  • Go语言基础语法--注释、基础结构2

    章节 GO语言基础语法--注释、基础结构(重要) 1.GO语言基础语法---注释、基础结构 基础结构注意事项 源文...

网友评论

      本文标题:Go基础笔记

      本文链接:https://www.haomeiwen.com/subject/cyaljftx.html