Gos eingebaute len()
function gibt eine signierte int
zurück. Warum wurde stattdessen kein uint
verwendet?Warum gibt len () einen vorzeichenbehafteten Wert zurück?
Ist es jemals möglich, dass len()
etwas Negatives zurückgibt?
Soweit ich das beurteilen kann, ist die Antwort nein:
- Arrays: „Die Anzahl der Elemente die Länge genannt und ist nie negativ“
- Slices: „Zu jeder Zeit gilt die folgende Beziehung:
0 <= len(s) <= cap(s)
“ - Maps „Die Anzahl der Kartenelemente wird seine Länge genannt“. (Ich konnte nichts in der Spezifikation finden, das dies explizit auf einen nichtnegativen Wert beschränkt, aber es ist schwierig für mich zu verstehen, wie weniger als 0 Elemente in einer Karte sein können)
- Strings "Ein Zeichenfolgenwert ist ein (möglicherweise leere) Sequenz von Bytes .... Die Länge eines Strings s (seine Größe in Bytes) kann mit der eingebauten Funktion
len()
"entdeckt werden (Wiederum ist schwer zu sehen, wie eine Sequenz eine negative Anzahl von Bytes haben könnte) - Channels „Anzahl von Elementen in der Warteschlange Kanalpuffer (dito)
Ein "Uint" könnte besser sein, wenn Sie das 2147483648. Element eines Slices ansprechen möchten. Aber dann würden Sie in Schwierigkeiten geraten, wenn Sie das Element 4294967296 ansprechen wollten. –