Forwarded from Golang news
📌 Уроки Golang с нуля /#13 - Оператор Switch.
Вышел Новый урок из нашего курса, в нем мы поговорим о Операторе Switch в Go.
Оператор switch обычно используется для описания действий, выполняемых программой в тех случаях, когда переменной назначаются определенные значения. Следующий пример показывает, как в подобной ситуации можно использовать операторы if:
Пять паттернов использования операторов switch
Базовый switch с default кейсом
▪Оператор switch запускает первый case (кейс), равный выражению условия.
▪Кейсы оцениваются сверху вниз, останавливаясь, когда кейс подходит.
▪Если ни один кейс не совпадает и есть default кейс, выполняются его утверждения.
В отличие от C и Java, выражения case не обязательно должны быть константами.
Без выражения условия
Switch без условия аналогичен switch true.
Кейс - список
В Go в качестве кейса можно использовать список значений - если выражение условия совпадает с одним из элементов списка, тогда кейс считается совпавшим:
Fallthrough (проваливание в следующий кейс)
Оператор fallthrough передает управление следующему кейсу.
Он может использоваться только как заключительное утверждение в выражениях кейса.
Вывод:
Оператор break завершает выполнение самого внутреннего оператора for, switch или select.
Если вам нужно выйти из окружающего цикла, а не из switch, вы можете поместить метку в цикл и перейти к этой метке. Следующий пример показывает оба варианта использования.
На символе a выполняется default кейс. На пробеле оператор break производит выход из switch. Далее на символе b выполняется default кейс. Далее на символе новой строки (newline - \n) происходит выход к метке Loop и выход из for range цикла.
Порядок исполнения
Сначала выражение switch оценивается один раз.
Затем case выражения оцениваются слева направо и сверху вниз:
первое, равное выражению switch, запускает выполнение операторов соответствующего case,
другие case пропущены.
Вывод:
🎞 Смотреть
Gonews
Вышел Новый урок из нашего курса, в нем мы поговорим о Операторе Switch в Go.
Оператор switch обычно используется для описания действий, выполняемых программой в тех случаях, когда переменной назначаются определенные значения. Следующий пример показывает, как в подобной ситуации можно использовать операторы if:
Пять паттернов использования операторов switch
Базовый switch с default кейсом
▪Оператор switch запускает первый case (кейс), равный выражению условия.
▪Кейсы оцениваются сверху вниз, останавливаясь, когда кейс подходит.
▪Если ни один кейс не совпадает и есть default кейс, выполняются его утверждения.
switch time.Now().Weekday() {
case time.Saturday:
fmt.Println("Сегодня суббота.")
case time.Sunday:
fmt.Println("Сегодня воскресенье.")
default:
fmt.Println("Сегодня будничный день.")
}
В отличие от C и Java, выражения case не обязательно должны быть константами.
Без выражения условия
Switch без условия аналогичен switch true.
// пропущенное выражение условия означает "true"
switch hour := time.Now().Hour(); {
case hour < 12:
fmt.Println("Доброе утро!")
case hour < 17:
fmt.Println("Добрый день!")
default:
fmt.Println("Добрый вечер!")
}
Кейс - список
В Go в качестве кейса можно использовать список значений - если выражение условия совпадает с одним из элементов списка, тогда кейс считается совпавшим:
func WhiteSpace(c rune) bool {
switch c {
case ' ', '\t', '\n', '\f', '\r':
return true
}
return false
}
Fallthrough (проваливание в следующий кейс)
Оператор fallthrough передает управление следующему кейсу.
Он может использоваться только как заключительное утверждение в выражениях кейса.
switch 2 {
case 1:
fmt.Println("1")
fallthrough
case 2:
fmt.Println("2")
fallthrough
case 3:
fmt.Println("3")
}
Вывод:
2
3
Выход с break
Оператор break завершает выполнение самого внутреннего оператора for, switch или select.
Если вам нужно выйти из окружающего цикла, а не из switch, вы можете поместить метку в цикл и перейти к этой метке. Следующий пример показывает оба варианта использования.
Loop:
for _, ch := range "a b\nc" {
switch ch {
case ' ': // пропускаем пробел
break
case '\n': // break на newline символе
break Loop
default:
fmt.Printf("%c\n", ch)
}
}
Вывод:
a
b
На символе a выполняется default кейс. На пробеле оператор break производит выход из switch. Далее на символе b выполняется default кейс. Далее на символе новой строки (newline - \n) происходит выход к метке Loop и выход из for range цикла.
Порядок исполнения
Сначала выражение switch оценивается один раз.
Затем case выражения оцениваются слева направо и сверху вниз:
первое, равное выражению switch, запускает выполнение операторов соответствующего case,
другие case пропущены.
// Foo печатает и возвращает n.
func Foo(n int) int {
fmt.Println(n)
return n
}
func main() {
switch Foo(2) {
case Foo(1), Foo(2), Foo(3):
fmt.Println("Первый case")
fallthrough
case Foo(4):
fmt.Println("Второй case")
}
}
Вывод:
2
1
2
Первый case
Второй case
Gonews
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код ?
Ответ
@golangtests
package main
import "fmt"
func sum(a, b any) any {
return a + b
}
func main() {
fmt.Println(sum(2, 3))
}
Ответ
@golangtests
Что выведет код ?
Anonymous Quiz
3%
1.5
91%
invalid operation: operator + not defined on a (variable of type any)
3%
0
3%
Ничего
Что выведет код ?
▪ Ответ
@golangtests
package main
import (
"fmt"
)
func main() {
i := -5
j := +5
fmt.Printf("%+d %+d", i, j)
}
▪ Ответ
@golangtests
Что выведет код ?
▪ Ответ
@golangtests
package main
import (
"fmt"
)
func main() {
var i interface{}
if i == nil {
fmt.Println("nil")
return
}
fmt.Println("not nil")
}
▪ Ответ
@golangtests
Что выведет код ?
▪ Ответ
@golangtests
package main
import (
"fmt"
)
func main() {
var x int
lstArray := []int{1, 2, 3}
x, lstArray = lstArray[0], lstArray[1:]
fmt.Println( x, lstArray)
}
▪ Ответ
@golangtests
🔍Что выведет код ?
Ответ
@golangtests
package main
import (
"fmt"
)
func main() {
x := [2]int{1, 2}
r := [...]int{1, 2}
fmt.Println(x == r)
}
Ответ
@golangtests
Лучший способ получать свежие обновлении и следить за трендами в разработке.
Машинное обучение: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
C#: t.me/csharp_ci
C/C++/ t.me/cpluspluc
Data Science: t.me/data_analysis_ml
Devops: t.me/devOPSitsec
Go: t.me/Golang_google
Базы данных: t.me/sqlhub
Rust: t.me/rust_code
Javascript: t.me/javascriptv
React: t.me/react_tg
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Linux: t.me/+A8jY79rcyKJlYWY6
Big Data: t.me/bigdatai
Хакинг: t.me/linuxkalii
Тестирование: https://yangx.top/+F9jPLmMFqq1kNTMy
Java: t.me/javatg
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка машинное обучение: https://yangx.top/addlist/_FjtIq8qMhU0NTYy
🇬🇧Английский: t.me/english_forprogrammers
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
Anonymous Quiz
28%
999 999
41%
555 999
10%
999 555
7%
555 555
14%
Посмотреть результаты
Что выведет код ?
📌 Ответ
@golangtests
package main
func main() {
for counter, i := 0, 0; i < 3; i++ {
defer func() {
counter++
print(counter)
}()
}
}
📌 Ответ
@golangtests