Maison > développement back-end > Golang > Trancher ou trancher dans Go

Trancher ou trancher dans Go

王林
Libérer: 2024-02-05 23:42:03
avant
587 Les gens l'ont consulté

Trancher ou trancher dans Go

Contenu de la question

Dans la documentation de la fonction unsafe.SliceData en go, il est écrit :

SliceData returns a pointer to the underlying array of the argument
slice.

If cap(slice) > 0, SliceData returns &slice[:1][0].

Copier après la connexion

Quelle est la logique derrière le retour de &slice[:1][0] au lieu de &slice[0] ? Pour autant que je sache (et mes tests le confirment), les deux renvoient la même adresse. Y a-t-il une raison spécifique pour laquelle les développeurs Go choisissent d’utiliser le premier plutôt que le second ? &slice[:1][0] 而不是 &slice[0] 背后的逻辑是什么?据我所知(并且我的测试证实),两者都会返回相同的地址。 Go 开发者选择使用前者而不是后者有什么具体原因吗?


正确答案


切片可能具有正容量(cap(slice) > 0),但同时可能具有 0 长度。像 slice[0]

Bonne réponse

slice[:1] 那样对其进行切片,这将产生长度为 1 的切片,并且您可以像 result[0]Une tranche peut avoir une capacité positive (cap(slice) > 0), mais en même temps elle peut avoir < code>0 code> longueur. L'indexer comme slice[0] provoquera une panique à l'exécution.

Si la tranche a une capacité positive, vous pouvez indexer le résultat comme

sans provoquer de panique à l'exécution.

Par exemple :

slice := make([]int, 0, 5)
fmt.Println(&slice[0])
Copier après la connexion

Cela donne : 🎜
panic: runtime error: index out of range [0] with length 0
Copier après la connexion
🎜Mais ça marche : 🎜
fmt.Println(&slice[:1][0])
Copier après la connexion

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!

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