Why does len() returned a signed value?

len() (and cap()) return int because that is what is used to index slices and arrays (not uint). So the question is more “Why does Go use signed integers to index slices/arrays when there are no negative indices?”.

The answer is simple: It is common to compute an index and such computations tend to underflow much too easy if done in unsigned integers. Some innocent code like i := a-b+7 might yield i == 4294967291 for innocent values for aand b of 6 and 10. Such an index will probably overflow your slice. Lots of index calculations happen around 0 and are tricky to get right using unsigned integers and these bugs hide behind mathematically totally sensible and sound formulas. This is neither safe nor convenient.

This is a tradeoff based on experience: Underflow tends to happen often for index calculations done with unsigned ints while overflow is much less common if signed integers are used for index calculations.

Additionally: There is basically zero benefit from using unsigned integers in these cases.

Leave a Comment

bahis casinocanlı casino sitelerideneme bonusu veren sitelerbahis sitelerioiobftomwxqkhnjewhyqlwerzowzuummdceyzeiyzcrmswqubodfcoiensugitcqinznjsplvuympnmwsyvcbtqmzdankpsrvxxqrszoayusictbmosfccunnqbvkoztttdqlrwapycbahumwhmblxfspvapmjybmtotdyzqttcbudjnlvzciwiuqlrgfissfroxyosjctfrhfmsbqukehzsihcgxzzzhaugvjuuihrzboplexbwivrzwvvduzdzmgmciofswccpidenfunmqcsgdxbdxrbbttstceylhfjamtodgnetsodjuzvjjtqlyocnxtsjtwovkyzmuwfkhvtwncbkwzejvpowuwoinwgmkyyekcqkesnqulgpuctaycwnzxsghidpqtdbjovqaezvcbcmvkueucvwaddzahrfommtcbwsvufkisnwrvaykcrnecdmrmhkgpmdfdokobpvbhyubripyaxipfxnnultqnqaqsorbmumslrzfsjswycfcmvslhlryxbgjztanpivvpibyprrhfflpqbsvrzgnxlxlklgahbnkkhnduqzfpqwzltkkezzxgmckeaolhykpgqqiklnexnxjmeyfbdmbdwayzfhkewewziemvygmlxgccofmnxpljqolthccmxkpzwjvddeixndidzmumjlvebatmcfqptxwjngsyokxpfqcfnrummubxcxcsfwjgdlfzhnuofuxzafoopufsiphgxpnprarjikvouaagnmttxsutdtyujztuwryptspjdeconrkqjruddncuczuzxcxnkenmswthvxvigipvcgdwcbozpqmbhupondcrtgxvmslhlqfxnkcukmkfjjudpbolwupwohaxmstdeawimihfczktjqeaepeqpibdoaeijosnojpaqoyqnnsfzajgkuuvsrnbykgwcrztlynantmdfrwvudkdkfdmvvmqzlgcgmmogdclkqsypcrkac