Golang学习摘录二:控制语句

if语句

i f x > 0 {   // {是强制的,且必须和if在同一行
 return y
} else {
 return x
}

if 和 switch 接受初始化语句,通常用于设置一个(局部)变量。

if err := Chmod(0664); err != nil { //nil 与 C 的 NULL 类似
fmt.Printf(err)  //err 的作用域被限定在 if 内
return err
}

goto语句

用 goto 跳转到一定是当前函数内定义的标签

func myfunc() { 
        i := 0
 Here:     // 这行的第一个词,以分号结束作为标签,标签名区分大小写
        println(i)
        i++
        goto Here   // 跳转
}

for语句

Go 的 for 循环有三种形式,只有其中的一种使用分号。

for init; condition; post { } // 和C的for一样
for condition {}              // 和while一样
for {}                        // 死循环

1、
sum := 0
for i:=0; i<10; i++ {
sum+=i ←sum = sum + i 的简化写法 } 
2、
for i,j:=0, len(a)-1; i<j; i,j=i+1,j-1 {
a[i], a[j] = a[j], a[i] //平行赋值 
}

break和continue

利用 break 可以提前退出循环,break 终止当前的循环。

for i:=0; i<10; i++ { 
  if i>5{
      break //终止这个循环,只打印 0 到 5
   }
   println(i)
}

循环嵌套循环时,可以在 break 后指定标签。用标签决定哪个循环被终止:

J: for j:=0; j<5; j++ {
    for i:=0; i<10; i++ {
       if i>5{ 
          break J // 现在种植的是j循环,而不是i的那个
        }
        println(i)
      } 
}

利用 continue 让循环进入下一个迭代,而略过剩下的所有代码。下面循环打印了 0 到 5。


for i:=0; i<10; i++ { 
    if i>5{
        continue // 跳过循环中所有的代码println(i)
    }
    println(i)
}

range

range可用于循环,支持slice、array、string、map和channel,range 是个迭代器,当被调用的时候,从它循环的内容中返回一个键值对。基于 不同的内容,range 返回不同的东西。

// 遍历array
list := []string {"a", "b", "c", "d", "e", "f"}
 for k, v := range list { 
  // k,v键值对:k为key,v为value
}
// 遍历字符串
for pos, char := range "aΦx" {
fmt.Printf("character '%c' starts at byte position %d\n",char, pos)
}

switch语句

Go 的 switch 非常灵活。表达式不必是常量或整数,执行的过程从上至下,直到找到匹 配项,而如果 switch 没有表达式,它会匹配 true 。这产生一种可能——使用 switch 编写 if-else-if-else 判断序列。

func unhex(c byte) byte { 
  switch {
    case '0'<=c&&c<='9': return c - '0'
    case 'a'<=c&&c<='f': return c - 'a' + 10
    case 'A'<=c&&c<='F': return c - 'A' + 10
  }
  return 0
 }

它不会匹配失败后自动向下尝试,但是可以使用 fallthrough 使其这样做。没 有 fallthrough:

switch i {
 case 0:  // 空的case体
case 1: 
            f() // 当i==0时,f不会被调用!
}

而这样:

switch i { 
  case 0:  fallthrough
  case 1:
        f() // 当i==0时,f会被调用! 
}

用 default 可以指定当其他所有分支都不匹配的时候的行为。

switch i { 
  case 0: 
  case 1: 
         f()
  default:
         g() //当i不等于0或1时调用
}

分支可以使用逗号分隔的列表。

func shouldEscape(c byte) bool { 
    switch c {
      case ' ', '?', '&', '=', '#', '+':    // ,或者 “or”都可以
                    return true
    }
  return false
}

使用 switch 对字节数组进行比较的例子:

func Compare(a, b []byte) int {
    for i:=0; i< len(a)&&i< len(b); i++ {
      switch {
        case a[i] > b[i]:
          return 1
        case a[i] < b[i]:
          return -1
        }
    }
      switch { 1
        case len(a) < len(b):
          return -1
        case len(a) > len(b):
          return 1 
       }
  return 0
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容