Golang 流程控制 循环 函数写法

2018-02-08  本文已影响87人  刘昊2018

学习一门新的编程语言,首先应该掰扯清楚的是,跟自己既有掌握的语言之间写法的区别,之前的文章,介绍了Golang中的变量相关的内容,这篇文章主要讲解以下三个方面的主题。

流程控制

package main

import (
    "fmt"

)

func main() {
    a := 2
    if a > 2 {
        fmt.Println("hehe")
    }else {
        fmt.Println("xixi")
    }

    switch a {
    case 1:
        fmt.Println("step 1")
    case 2:
        fmt.Println("step 2")
    case 3:
        fmt.Println("step 3")
    default:
        fmt.Println("default")
    }
}

需要注意的是:

这里涉及到一个新的关键字: fallthrough

a := 1
switch a {
    case 1:
        fmt.Println("step 1")
        fallthrough
    case 2:
        fmt.Println("step 2")
    case 3:
        fmt.Println("step 3")
    default:
    }

fallthrough表示继续执行下个case,与c,java中不写break行为一样。

循环

在go中,只有for,没有while系列。

遍历字符串的每个字符

str := "hello"

for index := 0; index < len(str); index++ {
  fmt.Printf("%c\n",str[index])
}

range 关键字

rang也可以用来遍历

for index,s := range str {
  fmt.Printf("%d=%c\n",index,s)
}

返回的第一个参数是索引,第二个参数为对应的索引对应的数据。

函数

go允许我们定义有参函数,无参函数,有返回值函数,无返回值函数,多参数函数,多返回值函数。

func main() {
    hellofunc()
}

func hellofunc() {
    fmt.Println("this is first func")
}
func main() {
    hellofunc("this is first func")
}

func hellofunc(str string) {
    fmt.Println(str)
}
func main() {
    f := getPI()

    fmt.Printf("%f",f)
}

func getPI() (pi float32) {
    return 3.14
}

func main() {
    result := sum(1,2)

    fmt.Println(result)
}

func sum(x int ,y int) (result int)  {
    return x + y
}
func main() {
    result := sum2(1,2,3,4,5,6,7,8,9,10)

    fmt.Println(result)
}

func sum2(args... int) (result int) {
    result = 0
    for _,item := range args {
        result = result + item
    }
    return result
}
func main() {
    a,b,c := dataset()
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
}

func dataset() (a int , b int , c int) {
    a,b,c = 1,2,3
    return a,b,c
}

注意

// good
func dataset() (a int , b int , c int) {
    a,b,c = 1,2,3
    return
}
func dataset() (int , int ,int) {
    a,b,c := 1,2,3
    return a,b,c
}

go 是推荐使用第一种写法的。写上返回值的名称,在return可以省略。

defer

defer用来处理延迟执行。

func main() {
    defer defer hellofunc("1")
    hellofunc("2")
    hellofunc("3")
    hellofunc("4")
    hellofunc("5")
}
func hellofunc(str string) {
    fmt.Println(str)
}

执行结果为:

2
3
4
5
1

修改代码:

func main() {
    defer hellofunc("1")
    defer hellofunc("2")
    hellofunc("3")
    hellofunc("4")
    defer hellofunc("5")
}

执行结果为:

3
4
5
2
1

修改代码

func main() {
    defer hellofunc("1")
    defer hellofunc("2")
    defer hellofunc("3")
    defer hellofunc("4")
    defer hellofunc("5")
}

执行结果:

5
4
3
2
1

defer遵循先进后出的栈结构。

以上,就是关于go中的流程控制,循环,函数相关知识的总结。

上一篇下一篇

猜你喜欢

热点阅读