Go语言学习(五)| 控制结构

mervyn 2018年7月1日12:41:59编程语言 GoGo语言学习(五)| 控制结构已关闭评论192

目录

Go 对于值之间的比较有非常严格的限制,只有两个类型相同的值才可以进行比较,如果值的类型是接口,它们也必须都实现了相同的接口文章源自编程技术分享-https://mervyn.life/74c34759.html

for循环(没有do或者while)
switch和if
select 类型选择和多路通讯转接器文章源自编程技术分享-https://mervyn.life/74c34759.html

条件控制

if / else if

Go 的 if 还有个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条件逻辑块内,其他地方就不起作用了,如下所示:文章源自编程技术分享-https://mervyn.life/74c34759.html

// 计算获取值x,然后根据x返回的大小,判断是否大于10。
if x := computedValue(); x > 10 {
    fmt.Println("x is greater than 10")
} else {
    fmt.Println("x is less than 10")
}

//这个地方如果这样调用就编译出错了,因为 x 是条件里面的变量
fmt.Println(x)

使用 else if 时必须要注意中间的空格文章源自编程技术分享-https://mervyn.life/74c34759.html

switch

package main

func main() {
    i := 1
    switch i {
    case 1:
        println(1)
        fallthrough
    case 2:
        println(2)
    default:
        println(0)
    }
}

注意文章源自编程技术分享-https://mervyn.life/74c34759.html

默认每个 case 后都带有 break,匹配成功后不会自动向下执行其他 case 。
fallthrough 关键字用来强制执行下一个 case 的值,如果 fallthrough 关键字后面显式的写 break 关键字会报错文章源自编程技术分享-https://mervyn.life/74c34759.html

例2:文章源自编程技术分享-https://mervyn.life/74c34759.html

package main

func main() {
    i := 1
    switch i {
    case 1, 2:
        println(i)
    default:
        println(0)
    }
}

goto

用 goto 跳转到一定是当前函数内定义的标签。标签名大小写敏感。文章源自编程技术分享-https://mervyn.life/74c34759.html

package main

import "fmt"

func main() {
    demo()
}

func demo() {
    i := 0
Here:
    fmt.Println(i)
    i++
    if i < 5 {
        goto Here
    }

}

循环

循环语句是用来重复执行某一段代码。文章源自编程技术分享-https://mervyn.life/74c34759.html

for 循环

for的三种形式文章源自编程技术分享-https://mervyn.life/74c34759.html

//与 PHP 的 for 一样
for init; condition; post {}
//和 while 一样
for condition {}
//和 PHP 的 while(true) 一样(死循环)
for {}

continue 语句用来跳出 for 循环中当前循环。
在 continue 语句后的所有的 for 循环语句都不会在本次循环中执行。循环体会在一下次循环中继续执行。
嵌套循环时,可以再 break 后面指定标签。用标签决定那个循环被终止。但是如果标签定义了就一定要使用文章源自编程技术分享-https://mervyn.life/74c34759.html

package main

func main() {
J:
    for j := 0; j < 5; j++ {
        for i := 0; i < 10; i++ {
            if i > 5 {
                break J //直接退出最外层循环J
            }
            println(i)
        }
    }
}

range 循环

range 可用于 slicearraystring mapchannel
当对 slice 或者 array 做循环时, range 返回序号作为键,这个序号对应的内容作为值。文章源自编程技术分享-https://mervyn.life/74c34759.html

package main

import "fmt"

func main() {
    str := "I love 中国"
    for k, v := range str {
        fmt.Printf("%d %s\n", k, v)
    }
}

例2:文章源自编程技术分享-https://mervyn.life/74c34759.html

package main

import "fmt"

func main() {
    arr := [...]string{"a", "b", "c", "d"}
    for _, val := range arr { //这个如果下面不想用到数组的序号,则要用 '_'
        fmt.Printf("%s", val)
    }
    fmt.Printf("\n")
}

也可以在字符串上直接使用 range 。文章源自编程技术分享-https://mervyn.life/74c34759.html

例:文章源自编程技术分享-https://mervyn.life/74c34759.html

package main

import "fmt"

func main() {
    list := []string{"a", "b", "c", "d"}
    for k, v := range list {
        fmt.Printf("%d %s\n", k, v)
    }

    fmt.Println("-----------------")

    list1 := "e例f"
    for pos, char := range list1 {
        fmt.Printf("%d %c\n", pos, char)
    }
}

注意输出结果:文章源自编程技术分享-https://mervyn.life/74c34759.html

0 a
1 b
2 c
3 d
-----------------
0 e
1 例      //注意:“例” 这个字占了3个字节,所以下面的序号变为了4
4 f
文章源自编程技术分享-https://mervyn.life/74c34759.html
weinxin
我的微信公众号
微信扫一扫
mervyn
python多版本及依赖包管理 Python

python多版本及依赖包管理

本文主要讲述如何通过 pyenv 来管理不同版本的 python ,以及如何使用 Pipenv 在同一个python版本实现项目之间依赖包的隔离。 pyenv Linux下安装 curl https:...
PHP 将16进制字符转换成汉字 PHP

PHP 将16进制字符转换成汉字

项目代码提供给外部的api,有些参数是中文的。发现有些客户在请求接口的时候,参数的值被转成了16进制,从而导致接口无法正常解析。 此时可以采用如下方法进行转移: <?php $param = &...
Go 方法指针接收者和值接收者 编程语言

Go 方法指针接收者和值接收者

Go 语言可以给自定义的类型添加一个方法。这里的方法其实也是函数,跟函数的区别在于在 func 关键字和函数名中间增加了一个参数,可以认为该类型也作为了参数传递入了函数中,例: package mai...