【前进】基本语法②(流程控制语句)

简而言之

我根据《A Tour of Go》的顺序总结了我个人在学习Go编程基础时所学到的内容。

对于(循环)

Go通过for循环结构来实现。
for循环由以下三个部分分割开来(分号分隔):

①初期化ステートメント:最初のイテレーション(繰り返し)の前に初期化が実行されます。
②条件式:各繰り返し毎に評価されます。
③後処理ステートメント: 各繰り返しの最後に実行されます

初始语句经常用于简短的变量声明,这些变量仅在for循环的范围内有效。不像JavaScript等语言,不需要使用(),但需要使用{}。

package main

import "fmt"

func main() {
 sum := 0
 for i := 0; i < 10; i++ {
    sum += i
    fmt.Println(sum)  //=> 0 1 3 6 10
 }
}

①初始语句和③后处理语句是完全可选的。
同时,分号也可以省略。

package main

import "fmt"

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

如果(条件分岐)

在Go语言中,像for循环一样,if语句也可以在条件之前写简单的语句。不过,if语句不需要使用括号进行条件判断,但需要使用大括号括起来表示if语句的范围。在if语句中声明的变量只在if的作用域内有效。

package main 

import "fmt"

func condition(arg string)string{
  if v := "GO"; arg == v {
    return "This is Golang"
  }else{
    return "This is not Golang"
  }
}
func main(){
	fmt.Println(condition("Swift")) //=> This is not Golang
}

切换(条件分支)

在 Go 中,只有选择的 case 会被执行,其后的所有 case 都不会被执行。

package main 

import "fmt"

func main(){
  lang := "Go"

  switch lang {
  case "Ruby":
       fmt.Println("This is Ruby")
  case "Go":
       fmt.Println("This is Go")
  default:
       fmt.Println("This is a programming language")
  }
// => This is Go
}

如果在switch之前没有写任何条件,则可以将其写为switch true。
这样可以更简单地编写if~then~else语法。

package main 

import "fmt"

func main(){
  lang := "Go"

  switch {
  case lang == "Ruby":
       fmt.Println("This is Ruby")
  case lang == "Go":
       fmt.Println("This is Go")
  default:
       fmt.Println("This is a programming language")
  }
// => This is Go
}

推迟执行

将传给defer的函数的执行延迟到调用它的函数结束(即执行return)之前。
在下面的例子中,传给defer的函数(fmt.Println(“World”)被延迟到调用它的函数(func main())结束之前执行。

package main 

import "fmt"

func main(){
	defer fmt.Println("World")	
	fmt.Println("Hello")
	//=> Hello
    //=> World
}

当将多个函数传递给defer时

如果在defer中传递了多个函数,那么这些调用将会被堆栈保存。
当调用者的函数返回时,defer中传递的函数将按照新数据→旧数据的LIFO(后进先出)顺序执行。
也就是说,最初被defer的行将会最后执行。

package main 

import "fmt"

func main(){
	defer fmt.Println("Golang") //defer1
	defer fmt.Println("Ruby") //defer2
	fmt.Println("JS") 
	//=> JS
	//=> Ruby
	//=> Golang
}

在上面的例子中,在原始函数func main()中运行fmt.Print(“JS”)之后,接着运行了新的信息fmt.Print(“Ruby”),最后运行了最古老的信息fmt.Print(“Golang”)。

请看

我的围棋之旅②
一场围棋之旅

广告
将在 10 秒后关闭
bannerAds