গো-এ, কোনও সুইচ / নির্বাচন থেকে ব্রেক স্টেটমেন্টটি ভেঙে যায়?


144

আমি জানি switch/ selectপ্রতিবেদনগুলি প্রতিটি মামলার পরে স্বয়ংক্রিয়ভাবে ভেঙে যায়। আমি নিম্নলিখিত কোডটিতে ভাবছি:

for {
    switch sometest() {
    case 0:
        dosomething()
    case 1:
        break
    default:
        dosomethingelse()
    }
}

না breakবিবৃতি থেকে প্রস্থান forলুপ বা শুধু switchঅবরোধ করবেন?

উত্তর:


199

স্টেট স্টেটমেন্টস, দ্য গো প্রোগ্রামিং ল্যাঙ্গুয়েজ স্পেসিফিকেশন।

একটি "বিরতি" বিবৃতি অন্তরতম "এর জন্য", "স্যুইচ" বা "নির্বাচন করুন" বিবৃতি কার্যকর করে execution

BreakStmt = "break" [ Label ] .

যদি কোনও লেবেল থাকে তবে অবশ্যই এটি অবশ্যই "জন্য", "স্যুইচ" বা "নির্বাচন করুন" বিবৃতিতে ঘের থাকা উচিত, এবং এটিই তার মৃত্যুদন্ড কার্যকর হয় (statements বিবৃতি, w সুইচ বিবৃতি, statementsশক্তি নির্বাচন)।

L:
  for i < n {
      switch i {
      case 5:
          break L
      }
  }

অতএব, breakআপনার উদাহরণের switchবিবৃতিটি "অন্তর্নিহিত" বিবৃতিটির বিবৃতিটি সমাপ্ত করে ।


4
কেবলমাত্র একজনকেই নির্বাচন করা যেতে পারে তার breakমধ্যে ব্যবহারের ক্ষেত্রে কী ? select {}case
জুলিও গেরেরা

3
কারণ যদি একটি একক কেস নির্বাচন করা হয়, তবে এটির দীর্ঘায়ু বাস্তবায়ন থাকতে পারে যা বিরতি ব্যবহার করে কেসটির কার্যকরকরণ বন্ধ করে দেয়, অনেকটা আপনি কোনও ফাংশনে যে কোনও জায়গা থেকে ফিরে আসতে পারেন।
টাইট পেট্রিক

এটা খারাপ অভ্যাস হবে না? কারণ বিবৃতিতে যাওয়া একটি খারাপ অভ্যাস, এবং স্যুইচ / নির্বাচনের বিবৃতিগুলি স্বয়ংক্রিয়ভাবে বিরতি
জন বালভিন আরিয়াস

55

একটি আশাবাদী উদাহরণস্বরূপ উদাহরণ:

loop:
for {
        switch expr {
        case foo:
                if condA {
                        doA()
                        break // like 'goto A'
                }

                if condB {
                        doB()
                        break loop // like 'goto B'                        
                }

                doC()
        case bar:
                // ...
        }
A:
        doX()
        // ...
}

B:
doY()
// ....

14

হ্যাঁ, breakভিতরের অংশটি ভেঙে দেয় switch

https://play.golang.org/p/SZdDuVjic4

package main

import "fmt"

func main() {

    myloop:for x := 0; x < 7; x++ {
        fmt.Printf("%d", x)
        switch {
        case x == 1:
            fmt.Println("start")
        case x == 5:
            fmt.Println("stop")
            break myloop
        case x > 2:
            fmt.Println("crunching..")
            break
        default:
            fmt.Println("idling..")
        }
    }
}
0idling..
1start
2idling..
3crunching..
4crunching..
5stop

Program exited.


2

এটি এটি ব্যাখ্যা করা উচিত।

for{
    x := 1
    switch {
    case x >0:
        fmt.Println("sjus")
    case x == 1:
        fmt.Println("GFVjk")
    default:
        fmt.Println("daslkjh")
    }
}
}

চিরকাল চলে

for{
    x := 1
    switch {
    case x >0:
        fmt.Println("sjus")
        break
    case x == 1:
        fmt.Println("GFVjk")
    default:
        fmt.Println("daslkjh")
    }
}
}

আবার চিরকাল চলে runs

কিন্তু

package main

import "fmt"

func main() {
d:
for{
x := 1
    switch {
    case x >0:
        fmt.Println("sjus")
        break d
    case x == 1:
        fmt.Println("GFVjk")
    default:
        fmt.Println("daslkjh")
    }
}
}

প্রিন্ট করা হবে ... পরিষ্কার?

http://play.golang.org/p/GOvnfI67ih


3
হুমম আমি একটি গো প্লে লিঙ্ক অন্তর্ভুক্ত করেছি, যা সহায়ক হতে পারে।
জস্মিত সিং 20

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.