πŸ’¬ΠšΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Go?



πŸ“ŒΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch β€” Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΠΎ врСмя выполнСния. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ switch содСрТит ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ case, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСйствуСт ΠΊΠ°ΠΊ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈ default case, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся, Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² case Π½Π΅ являСтся истинным.



πŸ‘‰ НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ swich, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт, содСрТит Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ интСрфСйса i Ρ‚ΠΈΠΏ int ΠΈΠ»ΠΈ string:



func do(i interface{}) {

switch v := i.(type) {

case int:

fmt.Printf("Double %v is %v\n", v, v*2)

case string:

fmt.Printf("%q is %v bytes long\n", v, len(v))

default:

fmt.Printf("I don't know type %T!\n", v)

}

}



func main() {

do(21)

do("hello")

do(true)

}




πŸ‘‰ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Double 21 is 42

"hello" is 5 bytes long

I don't know type bool!