Golang学習抜粋2:制御文
3496 ワード
if文
ifとswitchは初期化文を受け入れ、通常は(ローカル)変数を設定するために使用されます.
goto文
gotoで現在の関数で定義されているラベルにジャンプします.
for文
Goのforループには3つの形式があり、そのうちの1つだけがセミコロンを使用します.
breakとcontinue
breakを使用すると、ループを早期に終了し、breakは現在のループを終了します.
ネストされたループをループする場合は、break後にラベルを指定できます.どのループが終了するかをラベルで決定します.
continueを使用して、ループを次の反復に入れ、すべてのコードを少し過剰にします.次は0~5を繰り返し印刷します.
range
rangeはループに使用でき、slice、array、string、map、channelをサポートします.rangeは反復器で、呼び出されたときにループの内容からキー値のペアを返します.異なるコンテンツに基づいてrangeは異なるものを返します.
switch文
Goのswitchはとても柔軟です.式は定数や整数ではなく、一致するアイテムが見つかるまで上から下まで実行されますが、switchに式がない場合はtrueに一致します.これは、switchを使用してif−else−if−else判定シーケンスを記述する可能性を生じる.
一致に失敗した後に自動的に下に試行することはありませんが、fallthroughを使用して実行できます.fallthroughはありません
次のようになります.
他のすべてのブランチが一致しない場合の動作をdefaultで指定します.
ブランチはカンマで区切られたリストを使用できます.
switchを使用してバイト配列を比較する例:
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
}