Оператор switch в языке Go

Условный оператор в языке Go

Оператор switch используется для выполнения различных действий в зависимости от различных условий. Каждая ветвь case уникальна и проверяется одна за другой сверху вниз до тех пор, пока не будет найдено совпадение.

Оператор switch выполняется сверху вниз до нахождения совпадения, и после совпавшего case не нужно добавлять break.

По умолчанию каждый case в switch имеет в конце оператор break, поэтому после успешного совпадения другие case не выполняются. Если нам нужно выполнить последующие case, мы можем использоватьfallthrough 。

Синтаксис

Синтаксис оператора switch в языке программирования Go выглядит следующим образом:

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

Переменная var1 может быть любого типа, а val1 и val2 могут быть любыми значениями одного и того же типа. Тип не ограничивается константами или целыми числами, но должен быть одним и тем же; или выражения, конечный результат которых имеет тот же тип.

Можно проверять несколько значений, которые могут совпасть одновременно, разделяя их запятыми, например: case val1, val2, val3.

Блок-схема:

Пример

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 50,60,70 : grade = "C"
      default: grade = "D"  
   }

   switch {
      case grade == "A" :
         fmt.Printf("Отлично!\n" )    
      case grade == "B", grade == "C" :
         fmt.Printf("Хорошо\n" )      
      case grade == "D" :
         fmt.Printf("Зачёт\n" )      
      case grade == "F":
         fmt.Printf("Незачёт\n" )
      default:
         fmt.Printf("Плохо\n" );
   }
   fmt.Printf("Ваша оценка: %s\n", grade );      
}

Результат выполнения приведённого выше кода:

优秀!
你的等级是 A

Переключатель типов

Оператор switch также можно использовать для переключателя типов, чтобы определить фактический тип, хранящийся в переменной интерфейса.

Формат синтаксиса переключателя типов следующий:

switch x.(type){
    case type:
       statement(s);      
    case type:
       statement(s); 
    /* 你可以定义任意个数的case */
    default: /* 可选 */
       statement(s);
}

Пример

package main

import "fmt"

func main() {
   var x interface{}
     
   switch i := x.(type) {
      case nil:  
         fmt.Printf(" Тип x — %T",i)                
      case int:  
         fmt.Printf("x имеет тип int")                      
      case float64:
         fmt.Printf("x имеет тип float64")          
      case func(int) float64:
         fmt.Printf("x имеет тип func(int)")                      
      case bool, string:
         fmt.Printf("x имеет тип bool или string" )      
      default:
         fmt.Printf("Неизвестный тип")    
   }  
}

Результат выполнения приведённого выше кода:

x 的类型 :<nil>

fallthrough

Использование fallthrough приведёт к принудительному выполнению следующего оператора case; fallthrough не проверяет, истинен ли результат выражения следующего case.

Пример

package main

import "fmt"

func main() {

    switch {
    case false:
            fmt.Println("1. Условное выражение case ложно")
            fallthrough
    case true:
            fmt.Println("2. Условное выражение case истинно")
            fallthrough
    case false:
            fmt.Println(3. Условие case ложно)
            fallthrough
    case true:
            fmt.Println(4. Условие case истинно)
    case false:
            fmt.Println(5. Условие case ложно)
            fallthrough
    default:
            fmt.Println(6. Случай по умолчанию)
    }
}

Результат выполнения приведённого выше кода:

2、case 条件语句为 true
3、case 条件语句为 false
4、case 条件语句为 true

Из вывода приведённого выше кода видно, что switch начинает выполняться с первого case, выражение которого истинно. Если в case есть fallthrough, программа продолжит выполнять следующий case и не будет вычислять, истинно ли выражение следующего case.

Условный оператор в языке Go

Другие расширения