π¬Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ/Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ· Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΈ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°?
πΠ§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°: ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠΈΡΠ°ΡΡ ΠΈΠ· Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
1. ΠΡΠ»ΠΈ Π² ΠΊΠ°Π½Π°Π»Π΅ ΠΎΡΡΠ°Π»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π² Π½Π΅Π³ΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½Ρ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ.
2. ΠΡΠ»ΠΈ Π² ΠΊΠ°Π½Π°Π»Π΅ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ, ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»Π°.
3. ΠΡΠ»ΠΈ ΠΊΠ°Π½Π°Π» ΡΠΆΠ΅ Π·Π°ΠΊΡΡΡ ΠΈ Π² Π½Π΅ΠΌ Π½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠ½ΠΎΠ²Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»Π°.
πΠΠ°ΠΏΠΈΡΡ Π² Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ°Π½Π°Π»: ΠΏΠΎΠΏΡΡΠΊΠ° Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ°Π½Π°Π» Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΏΠ°Π½ΠΈΠΊΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π°ΠΏΠΈΡΡ Π² Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ°Π½Π°Π» ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ.
πΠ§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ (nil) ΠΊΠ°Π½Π°Π»Π° Π±ΡΠ΄Π΅Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈ Π·Π°ΠΏΠΈΡΡ Π² Π½Π΅ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ (nil) ΠΊΠ°Π½Π°Π».
βοΈΠΠ°ΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π·Π°ΠΊΡΡΠ²Π°ΡΡ ΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠ°Π½ΠΈΠΊ ΠΈ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ.
πΠ§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°: ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠΈΡΠ°ΡΡ ΠΈΠ· Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
1. ΠΡΠ»ΠΈ Π² ΠΊΠ°Π½Π°Π»Π΅ ΠΎΡΡΠ°Π»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π² Π½Π΅Π³ΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½Ρ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ.
2. ΠΡΠ»ΠΈ Π² ΠΊΠ°Π½Π°Π»Π΅ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ, ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»Π°.
3. ΠΡΠ»ΠΈ ΠΊΠ°Π½Π°Π» ΡΠΆΠ΅ Π·Π°ΠΊΡΡΡ ΠΈ Π² Π½Π΅ΠΌ Π½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠ½ΠΎΠ²Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»Π°.
ch := make(chan int)
close(ch)
value, ok := <-ch
fmt.Println(value, ok)
// 0 falseπΠΠ°ΠΏΠΈΡΡ Π² Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ°Π½Π°Π»: ΠΏΠΎΠΏΡΡΠΊΠ° Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ°Π½Π°Π» Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΏΠ°Π½ΠΈΠΊΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π°ΠΏΠΈΡΡ Π² Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ°Π½Π°Π» ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ.
ch := make(chan int)
close(ch)
ch <- 42
// panic: send on closed channelπΠ§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ (nil) ΠΊΠ°Π½Π°Π»Π° Π±ΡΠ΄Π΅Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈ Π·Π°ΠΏΠΈΡΡ Π² Π½Π΅ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ (nil) ΠΊΠ°Π½Π°Π».
βοΈΠΠ°ΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π·Π°ΠΊΡΡΠ²Π°ΡΡ ΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠ°Π½ΠΈΠΊ ΠΈ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ.