golang プロセス制御

WBOY
WBOYオリジナル
2023-05-13 11:12:37443ブラウズ

Golang は、プロセス制御の豊富な機能を提供する効率的で最新のプログラミング言語です。この記事では、条件ステートメント、ループ ステートメント、ジャンプ ステートメントなど、Golang のフロー制御構造について説明し、読者がこれらの構造をよりよく理解して適用できるようにします。

条件ステートメント

Golang の条件ステートメントには、if ステートメント、switch ステートメント、select ステートメントが含まれます。

  1. if 文

if 文は条件判定に使用します 構文は次のとおりです:

if condition {
    statement(s)
} else if condition {
    statement(s)
} else {
    statement(s)
}

condition は判定に使用する条件式です。 真と偽。条件が true の場合、if に続くステートメント ブロックが実行され、それ以外の場合、ステートメント ブロックはスキップされ、次のステートメントが実行されます。

条件の後に else if キーワードが続く場合、各条件式が順番に評価され、最初に true となったステートメント ブロックが実行されます。すべての条件式が false の場合、else に続くステートメントのブロックが実行されます。 else ブロックがないと、条件が false の場合、ステートメントは実行されません。

次は if ステートメントの例です:

package main

import "fmt"

func main() {
    var a int = 10
    if a < 20 {
        fmt.Printf("a 小于 20
")
    }
    fmt.Printf("a 的值为 : %d
", a)
}

出力結果:

a 小于 20
a 的值为 : 10
  1. switch ステートメント

switch ステートメントは

switch expression {
    case value1:
        statement(s)
    case value2:
        statement(s)
    case value3:
        statement(s)
    default:
        statement(s)
}

このうち、expression は、case 句内の定数または変数を照合するために使用される式です。一致が成功した場合は、対応するステートメント ブロックが実行され、そうでない場合は、ステートメント ブロックがスキップされ、次の case 句 (存在する場合) が実行されます。

すべての case 句が正常に一致しない場合は、デフォルトに続くステートメント ブロックが実行されます。デフォルト句がない場合、ステートメントは実行されません。

次は switch ステートメントの例です:

package main

import "fmt"

func main() {
    var grade string = "B"
    var marks int = 90

    switch marks {
        case 90:
            grade = "A"
        case 80:
            grade = "B"
        case 60, 70:
            grade = "C"
        default:
            grade = "D"
    }

    switch {
        case grade == "A" :
            fmt.Printf("优秀!
" )
        case grade == "B", grade == "C" :
            fmt.Printf("良好
" )
        case grade == "D" :
            fmt.Printf("及格
" )
        case grade == "F":
            fmt.Printf("不及格
" )
        default:
            fmt.Printf("差
" )
    }
    fmt.Printf("你的等级是 %s
", grade )
}

出力結果:

良好!
你的等级是 B
  1. select ステートメント

select ステートメントは同時に使用 複数のチャネルを監視する場合、構文は次のとおりです。

select {
    case communication clause 1:
        statement(s)
    case communication clause 2:
        statement(s)
    .............
    default:
        statement(s)
}

このうち、通信節は、チャネル、または送信動作と受信動作を含む方向性のあるチャネル動作を指します。チャネルに読み取りまたは書き込み可能なデータがある場合は、対応するステートメント ブロックが実行され、そうでない場合はチャネルはスキップされ、次の通信節が実行されます。どのチャネルにも読み取りまたは書き込み可能なデータがない場合は、デフォルトに従うステートメント ブロックが実行されます。

次は select ステートメントの例です:

package main

import "fmt"

func fibonacci(c, quit chan int) {
    x, y := 0, 1
    for {
        select {
        case c <- x:
            x, y = y, x+y
        case <-quit:
            fmt.Println("quit")
            return
        }
    }
}

func main() {
    c := make(chan int)
    quit := make(chan int)
    go func() {
        for i := 0; i < 10; i++ {
            fmt.Println(<-c)
        }
        quit <- 0
    }()
    fibonacci(c, quit)
}

出力結果:

0
1
1
2
3
5
8
13
21
34
quit

ループ ステートメント

Golang のループ ステートメントには for ステートメントが含まれますそして range ステートメント。

  1. for ステートメント

for ステートメントは、ループ内のコードを実行するために使用されます。構文は次のとおりです。 、initはループを開始するタイミングに使用され、conditionはループが継続するかどうかを判断するために使用され、postはループ変数の動作を制御するために使用されます。

次は for ステートメントの例です:

for init; condition; post {
    statement(s);
}

出力結果:

package main

import "fmt"

func main() {
    var b int = 15
    var a int

    for i := 0; i < 10; i++ {
        fmt.Printf("i 的值为: %d
", i)
    }

    for a < b {
        a++
        fmt.Printf("a 的值为: %d
", a)
    }
}

range ステートメント
  1. range ステートメントは配列、スライス、チャネル、またはマップの要素の走査に使用されます。構文は次のとおりです。
i 的值为: 0
i 的值为: 1
i 的值为: 2
i 的值为: 3
i 的值为: 4
i 的值为: 5
i 的值为: 6
i 的值为: 7
i 的值为: 8
i 的值为: 9
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 10
a 的值为: 11
a 的值为: 12
a 的值为: 13
a 的值为: 14
a 的值为: 15

このうち、キーと値はそれぞれ現在の要素のキーと値を表します。

次は range ステートメントの例です:

for key, value := range oldMap {
    newMap[key] = value
}

出力結果:

package main

import "fmt"

func main() {
    nums := []int{2, 3, 4}
    sum := 0
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)

    for i, num := range nums {
        if num == 3 {
            fmt.Println("index:", i)
        }
    }

    kvs := map[string]string{"a": "apple", "b": "banana"}
    for k, v := range kvs {
        fmt.Printf("%s -> %s
", k, v)
    }
}

Jump ステートメント

Golang の Jump ステートメントには、break と continue が含まれます。後藤。

break ステートメント
  1. break ステートメントはループ本体を中断するために使用されます。構文は次のとおりです:
sum: 9
index: 1
a -> apple
b -> banana

出力結果:

for i := 0; i < 10; i++ {
    if i == 5 {
        break
    }
    fmt.Printf("%d ", i)
}
fmt.Println()

Continue ステートメント
  1. Continue ステートメントは、現在のループ本体のこの繰り返しを中断するために使用されます。構文は次のとおりです:
0 1 2 3 4

出力結果:

for i := 0; i < 10; i++ {
    if i == 5 {
        continue
    }
    fmt.Printf("%d ", i)
}
fmt.Println()

goto ステートメント
  1. goto ステートメントは、無条件で特定のコード ラベル (ラベル) にジャンプして実行するために使用されます。構文は次のとおりです。 #ここで、label は識別子、statement は実行ステートメントです。

次は goto ステートメントの例です:

0 1 2 3 4 6 7 8 9

出力結果:

goto label;
...
label: statement

要約

Golang のフロー制御構造には、条件文とループ文とジャンプ文。条件文には、単一または複数の条件を判断するために使用される if、switch、select 文が含まれます。ループ ステートメントには、コードの一部をループしたり要素を走査したりするために使用される for ステートメントと range ステートメントが含まれます。 Jump ステートメントには、break、 continue、および goto ステートメントが含まれます。これらは、現在のループを中断したり、実行のためにラベルに無条件にジャンプしたりするために使用されます。実際のプログラミングでは、必要に応じて適切なプロセス制御構造を柔軟に選択し、コードロジックを実装する必要があります。

以上がgolang プロセス制御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。