Rumah > pembangunan bahagian belakang > Golang > Menghiris lwn. menghiris dalam Go

Menghiris lwn. menghiris dalam Go

王林
Lepaskan: 2024-02-05 23:42:03
ke hadapan
586 orang telah melayarinya

Menghiris lwn. menghiris dalam Go

Kandungan soalan

Dalam dokumentasi fungsi tidak selamat.SliceData dalam pergi, ia berkata:

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

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

Salin selepas log masuk

Apakah logik di sebalik mengembalikan &slice[:1][0] dan bukannya &slice[0]? Setakat yang saya tahu (dan ujian saya mengesahkan), kedua-duanya mengembalikan alamat yang sama. Adakah terdapat sebarang sebab khusus mengapa pembangun Go memilih untuk menggunakan yang pertama daripada yang terakhir? &slice[:1][0] 而不是 &slice[0] 背后的逻辑是什么?据我所知(并且我的测试证实),两者都会返回相同的地址。 Go 开发者选择使用前者而不是后者有什么具体原因吗?


正确答案


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

Jawapan betul

slice[:1] 那样对其进行切片,这将产生长度为 1 的切片,并且您可以像 result[0]Sekeping mungkin mempunyai kapasiti positif (cap(slice) > 0), tetapi pada masa yang sama ia mungkin mempunyai < kod>0 kod> panjang. Mengindeksnya seperti slice[0] akan menyebabkan panik masa jalan.

Jika hirisan mempunyai kapasiti positif, anda boleh mengindeks hasil seperti

tanpa menyebabkan panik masa larian.

Contohnya:

slice := make([]int, 0, 5)
fmt.Println(&slice[0])
Salin selepas log masuk

Ini menghasilkan: 🎜
panic: runtime error: index out of range [0] with length 0
Salin selepas log masuk
🎜Tetapi ini berkesan: 🎜
fmt.Println(&slice[:1][0])
Salin selepas log masuk

Atas ialah kandungan terperinci Menghiris lwn. menghiris dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan