for语句

记得刚参加工作的时候,使用的语言主要是VB和Delphi,那个时候我大量使用 do while这种循环。后来主要使用PHP和Python,越来越多的使用for语句,甚至几乎不用while语句。现在,感觉其实while语句不是必须的,Go语言就没有while这种循环结构。要想在Go语言中执行循环语句只有for这一个结构。

一个for里面是一个代码块。

for循环体的几种写法:

  1. for{
  2. //死循环相当于 while(1){}
  3. }
  4. for i<10{
  5. i +=1
  6. }
  7. for i := 0; i < 10; i++ {
  8. //看这个是不是很像C语言了?
  9. }
  10. //重磅推荐下面的写法,相当于很多语言里面的foreach
  11. //for range 结构
  12. sunnyMap := map[string]int{"Mon": 0, "Tue": 1, "Wed": 2, "Thu": 3, "Fri": 4, "Sat": 5, "Sun": 6}
  13. for key, value := range sunnyMap {
  14. fmt.Printf("%d->%s\r\n", key, value)
  15. }

跳出循环使用break

  1. sunnyMap := map[string]int{"Mon": 0, "Tue": 1, "Wed": 2, "Thu": 3, "Fri": 4, "Sat": 5, "Sun": 6}
  2. for key, value := range sunnyMap {
  3. if key=="Thu"{
  4. break
  5. }
  6. fmt.Printf("%d->%s\r\n", key, value)
  7. }

关键字 continue 忽略剩余的循环体而直接进入下一次循环的过程,但不是无条件执行下一次循环,执行之前依旧需要满足循环的判断条件。

  1. sunnyMap := map[string]int{"Mon": 0, "Tue": 1, "Wed": 2, "Thu": 3, "Fri": 4, "Sat": 5, "Sun": 6}
  2. for key, value := range sunnyMap {
  3. if key=="Thu"{
  4. continue
  5. }
  6. fmt.Printf("%d->%s\r\n", key, value)
  7. }

大家注意对map进行遍历的时候尽量使用for range这中结构,因为map结构不是有序的。

用Go来解决经典数学问题——完数

  1. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6=1+2+3.
  2. 编程找出 10000 以内的所有完数。
  3. 例如:
  4. 6=1+2+3
  5. 28=1+2+3+...+6+7
  6. 496=1+2+3+...+30+31
  7. 8128=1+2+3…+126+127
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. for i := 1; i < 10000; i++ {
  7. sum := 0
  8. for j := 1; j < i; j++ {
  9. if i%j == 0 {
  10. sum += j
  11. }
  12. }
  13. if i == sum {
  14. fmt.Println(i)
  15. }
  16. }
  17. }

链接