Golang学習抜粋2:制御文

3496 ワード

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ループには3つの形式があり、そのうちの1つだけがセミコロンを使用します.
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

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
",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
}