Публикации - Go

Управляющие конструкции - Оператор switch

Оператор switch имеет две разные формы. В первой он содержит вычисляемое выражение, тогда как во второй не имеет выражения для вычисления. В этом случае выражения вычисляются в каждом операторе case, что повышает гибкость switch. Основное преимущество switch заключается в том, что при правильном использовании он упрощает сложные и трудночитаемые блоки if-else.

// с выражением после switch
switch argument {
 case "0":
  fmt.Println("Zero!")
 case "1":
  fmt.Println("One!")
 case "2", "3", "4":
  fmt.Println("2 or 3 or 4")
  fallthrough
 default:
  fmt.Println("Value:", argument)
}
Здесь мы видим блок switch с четырьмя ветвлениями. Первые три требуют точного совпадения string, а последнее соответствует всему остальному. Порядок операторов case важен, поскольку выполняется только первое совпадение. Ключевое слово fallthrough сообщает Go, что после выполнения этой ветки необходимо перейти на следующую, которая в данном случае является веткой default

Следующий код показывает вторую форму switch, где условие вычисляется в каждой ветви case:

value, err := strconv.Atoi(argument)
	if err != nil {
		fmt.Println("Cannot convert to int:", argument)
		return
	}

	// Без выражения после switch
	switch {
	case value == 0:
		fmt.Println("Zero!")
	case value > 0:
		fmt.Println("Positive integer")
	case value < 0:
		fmt.Println("Negative integer")
	default:
		fmt.Println("This should not happen:", value)
	}

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться