Rumah >pembangunan bahagian belakang >Golang >Slice mengembalikan panjang yang tidak dijangka
editor php Youzi sering menghadapi masalah mengembalikan panjang yang tidak dijangka apabila menggunakan operasi menghiris. Operasi menghiris ialah salah satu daripada operasi tatasusunan yang biasa digunakan Anda boleh mendapatkan beberapa elemen tatasusunan dengan menentukan kedudukan permulaan dan kedudukan penamat. Walau bagaimanapun, kadangkala kami mendapati bahawa panjang kepingan yang dikembalikan tidak seperti yang diharapkan, yang mungkin disebabkan oleh beberapa kesilapan atau salah faham yang biasa. Dalam artikel ini, kami akan memperkenalkan secara terperinci masalah yang mungkin anda hadapi semasa operasi menghiris dan menyediakan penyelesaian untuk membantu anda memahami dan menggunakan operasi penghirisan dengan lebih baik.
Saya sedang mengerjakan golang dan saya berhenti dan ia mengelirukan saya.
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)) }
Keluaran ialah
13 9 3 7 3
Kepingan bulan mempunyai 12 elemen, tetapi cap(month)
dan len(month)
mengembalikan 13
, kenapa? cap(month)
和 len(month)
返回 13
,为什么?
首先,month
是一个数组 - 不是切片 - 其类型为 [13]string
。只需查看其类型,我们就知道它有 13 个元素(长度),而切片的类型为 []string
0
处为数组指定 string
Pertama sekali, [13]string
. Hanya melihat jenisnya, kita tahu bahawa ia mempunyai 13 elemen (panjang) dan jenis hirisan ialah []string
.
Pengindeksan tatasusunan dan hirisan bermula dari sifar, bukan dari satu. Memandangkan anda tidak mengindeks nilai
:
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"}
string
Ia bersamaan dengan:
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"}Iaitu, nilai sifar
(iaitu rentetan kosong) ...
替换为 13
disediakan sebagai elemen pertama.
Sila ambil perhatian bahawa saya ada
. Ellipsis memberitahu pengkompil untuk membuat kesimpulan panjang tatasusunan (yang merupakan sebahagian daripada jenisnya) berdasarkan pemula.
month
的长度仍将为 13
Walaupun anda menggunakan literal hirisan dan bukannya literal tatasusunan sebagai pemula:
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"}🎜Atas sebab yang sama seperti di atas, (menghiris dalam kes ini) 🎜. 🎜
Atas ialah kandungan terperinci Slice mengembalikan panjang yang tidak dijangka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!