Maison > développement back-end > Golang > Slice renvoie une longueur inattendue

Slice renvoie une longueur inattendue

WBOY
Libérer: 2024-02-09 10:21:29
avant
698 Les gens l'ont consulté

Slice renvoie une longueur inattendue

l'éditeur php Youzi rencontre souvent le problème du retour d'une longueur inattendue lors de l'utilisation de l'opération de découpage. L'opération de découpage est l'une des opérations de tableau couramment utilisées. Vous pouvez obtenir certains éléments du tableau en spécifiant la position de départ et la position de fin. Cependant, nous constatons parfois que la longueur de tranche renvoyée n'est pas celle attendue, ce qui peut être dû à des erreurs ou des malentendus courants. Dans cet article, nous présenterons en détail les problèmes que vous pouvez rencontrer lors des opérations de découpage et proposerons des solutions pour vous aider à mieux comprendre et utiliser les opérations de découpage.

Contenu de la question

Je travaillais sur Golang et je me suis arrêté et ça m'a dérouté.

package main

import "fmt"

func main() {
    month := [...]string{1: "jan", 2: "fab", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "aug", 9: "sep", 10: "oct", 11: "nov", 12: "dec"}
    fmt.println(cap(month))
    summer := month[6:9]
    q2 := month[4:7]
    fmt.println(cap(q2))
    fmt.println(len(q2))

    fmt.println(cap(summer))
    fmt.println(len(summer))
}
Copier après la connexion

Le résultat est

13
9
3
7
3
Copier après la connexion

La tranche mensuelle comporte 12 éléments, mais cap(month) et len(month) renvoient 13, pourquoi ? cap(month)len(month) 返回 13,为什么?

解决方法

首先,month 是一个数组 - 不是切片 - 其类型为 [13]string。只需查看其类型,我们就知道它有 13 个元素(长度),而切片的类型为 []string

Solution de contournement

0 处为数组指定 stringTout d'abord, month est un tableau - pas une tranche - et son type est [13]string. Rien qu'en regardant son type, nous savons qu'il comporte 13 éléments (longueur) et que le type de la tranche est []string.

L'indexation des tableaux et des tranches commence à partir de zéro, pas de un. Puisque vous n'indexez pas

valeur :

month := [...]string{1: "jan", 2: "fab", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "aug", 9: "sep", 10: "oct", 11: "nov", 12: "dec"}
Copier après la connexion
stringC'est équivalent à :
month := [13]string{0: "", 1: "jan", 2: "fab", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "aug", 9: "sep", 10: "oct", 11: "nov", 12: "dec"}
Copier après la connexion
C'est-à-dire que la valeur

zéro

(c'est-à-dire la chaîne vide) de ... 替换为 13 est fournie comme premier élément.

Veuillez noter que j'ai

. Les points de suspension indiquent au compilateur de déduire la longueur du tableau (qui fait partie de son type) en fonction de l'initialiseur.

month 的长度仍将为 13 Même si vous utilisez un littéral slice au lieu d'un littéral tableau comme initialiseur :

month := []string{1: "Jan", 2: "Fab", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "Aug", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dec"}
Copier après la connexion
🎜Pour les mêmes raisons que ci-dessus, (tranchage dans ce cas) 🎜. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal