GO学习-基础概念02

第二节

循环语句

在GO里面 ,只有for这个关键词来表示循环结构

格式一:和C里的for循环类似,但是省略了 ()

package main

import "fmt"

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

也可以这么写

package main

import "fmt"

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

格式二:将 for当做while来使用

package main

import "fmt"

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

无限循环  如果你省略了循环条件,则会进入无限循环

package main

func main() {
	for {
	}
}

判断语句

if判断语句  

格式一:  if   条件  {    }

package main

import (
	"fmt"
	"math"
)

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

func main() {
	fmt.Println(sqrt(2), sqrt(-4))
}

格式二:if  声明语句 ; 条件  {    }

这个声明的变量 只在 if 的结构体内有效

package main

import (
	"fmt"
	"math"
)

func pow(x, n, lim float64) float64 {
	if v := math.Pow(x, n); v < lim {
		return v
	}
	return lim
}

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

格式三: if   声明语句  ;  条件 {    }  else  {     }

这个声明的变量 在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)
	}
	// can't use v here, though
	return lim
}

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

选择语句

switch

GO的switch  其实就算一种 if-else 语句的缩写形式

它跟 C,C++,JAVA里的switch 很相似,但也有不同:

go里的switch 只会运行被选中的那条语句,而不像C 里面会运行被选中语句后的所有语句。所以不需要break

同时  最重要的一点是  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.", os)
	}
}

switch  是从上到下去寻找的。

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语句

不写条件,则默认为条件是 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("world2")
	defer fmt.Println("world1")
	
	fmt.Println("test")
	fmt.Println("hello")
	fmt.Println("hfdasf")
}//结果  test hello hfdasf world1 world2
package main

import "fmt"
//  defer放入栈中
func main() {
	fmt.Println("counting")

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

	fmt.Println("done")
}

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值