πŸ’¬ Как ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ цСлочислСнноС ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π² Go?



πŸ“Œ Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ цСлочислСнноС ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ увСличСния значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΈΜ† Ρ‚ΠΈΠΏΠ°, основанного Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ (int8, int16, int32, int64, uint8, uint16, uint32 ΠΈΠ»ΠΈ uint64), ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с матСматичСскими константами.



πŸ”Έ НапримСр, Π² случаС с int32:



func Inc32(counter int32) int32 {

if counter == math.MaxInt32 {

panic("int32 overflow")

}

return counter + 1

}







πŸ”Έ Π­Ρ‚Π° функция провСряСт, достигла Π»ΠΈ пСрСмСнная значСния math.MaxInt32. Если Π΄Π°, Ρ‚ΠΎ Π΅Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ.



πŸ”Έ А Ρ‡Ρ‚ΠΎ насчСт Ρ‚ΠΈΠΏΠΎΠ² int ΠΈ uint?



Π”ΠΎ вСрсии Go 1.17 ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ эти константы Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠ΅ math.MaxInt, math.MinInt ΠΈ math.MaxUint стали Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° math. Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° int, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ math.MaxInt:



func IncInt(counter int) int {

if counter == math.MaxInt {

panic("int overflow")

}

return counter + 1

}







Π›ΠΎΠ³ΠΈΠΊΠ° Ρ‚Π° ΠΆΠ΅ самая для uint. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ math.MaxUint:



func IncUint(counter uint) uint {

if counter == math.MaxUint {

panic("uint overflow")

}

return counter + 1

}