昨天項(xiàng)目上線等浊,出現(xiàn)一個(gè)莫名奇妙的錯(cuò)誤,緩存中計(jì)算庫(kù)存所剩余數(shù)量摹蘑,拿全部庫(kù)存-已用庫(kù)存筹燕,這里設(shè)置的庫(kù)存為uint32位
var a uint32 = 2
var b uint32 = 3
v := a - b
fmt.Println(v)
打印:(剛開始一臉悶逼)
4294967295
糾錯(cuò)好久,才想起了這是個(gè)細(xì)節(jié)問題纹蝴,當(dāng)a-b成負(fù)數(shù)時(shí)候庄萎,因?yàn)椋?會(huì)自動(dòng)把v當(dāng)做uint32位,所以系統(tǒng)會(huì)把負(fù)數(shù)的1的正負(fù)位當(dāng)做最高進(jìn)制來算塘安,造成數(shù)值很大
改為
v := int(a) - int(b)
問題很小糠涛,就是不容易發(fā)現(xiàn)