Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kongsi nota tentang menggunakan Slice in go

Kongsi nota tentang menggunakan Slice in go

藏色散人
藏色散人ke hadapan
2021-10-13 17:28:522301semak imbas

Artikel ini ditulis oleh ruangan tutorial go language untuk berkongsi dengan anda langkah berjaga-jaga untuk menggunakan Slice in go. Saya harap ia dapat membantu rakan yang memerlukan.

Artikel ini membincangkan penggunaan kepingan dalam Go Mari kita lihat program berikut

package mainimport (
    "fmt"
    )func main() {
    var array [10]int
    var slice = array[5:6]
    fmt.Println("lenth of slice: ", len(slice))
    fmt.Println("capacity of slice: ", cap(slice))
    fmt.Println(&slice[0] == &array[5])}
  • Apa yang saya ingin katakan tentang program ini ialah: fungsi utama Integer. tatasusunan tatasusunan 10 panjang ditakrifkan, dan kemudian hirisan hirisan ditakrifkan untuk memotong elemen ke-6 tatasusunan Akhirnya, panjang dan kapasiti hirisan dicetak, dan elemen pertama bagi hirisan dan elemen ke-6 tatasusunan. dinilai sama ada alamatnya sama.
  • Semua orang, fikirkan sama ada elemen pertama hirisan adalah sama dengan elemen ke-6 tatasusunan Mungkin anda boleh menjalankan program ini untuk membuktikannya dan lihat hasilnya, saya tidak akan berikan ke dalam atur cara di atas Potongan dibuat dengan tatasusunan data dan berkongsi ruang storan dengan tatasusunan Kedudukan permulaan hirisan ialah tatasusunan[5], panjangnya ialah 1, dan kapasiti ialah 5. Alamat kepingan. [0] dan tatasusunan[5] adalah sama.

Mari kita lihat program ini dan cuba jalankan sendiri amalan hands-on adalah guru terbaik

package mainimport (
    "fmt")func AddElement(slice []int, e int) []int {
    return append(slice, e)
    }func main() {
    var slice []int
    slice = append(slice, 1, 2, 3)
    newSlice := AddElement(slice, 4)
    fmt.Println(&slice[0] == &newSlice[0])}
  • Apa yang saya ingin nyatakan dalam. perenggan di atas Fungsi AddElement() menerima kepingan dan elemen, menambahkan elemen ke dalam kepingan dan mengembalikan kepingan. Tentukan hirisan dalam fungsi main(), tambahkan 3 elemen pada hirisan, dan kemudian panggil AddElement() untuk terus menambahkan elemen keempat pada hirisan dan tentukan hirisan baharu newSlice. Akhir sekali, ia dinilai sama ada slice newSlice baru dan slice lama berkongsi ruang storan
  • Saya percaya ramai rakan berpendapat bahawa append boleh mencetuskan pengembangan Slice lama, tetapi mereka tidak pasti mengenainya teruskan membaca. "Mungkin" telah menjadi "pasti":
    1. Apabila fungsi tambah dilaksanakan, ia akan menentukan sama ada kapasiti hirisan boleh menyimpan elemen baharu, jika tidak, ia akan digunakan semula untuk ruang storan ruang storan baharu akan menjadi dua kali ganda daripada saiz asal atau 1.25 kali (bergantung pada saiz ruang yang diperluaskan dalam contoh ini, dua operasi tambah sebenarnya dilakukan kembangkan semula, jadi kepingan lama dan baharu akan berkongsi sekeping ruang. Program ini akan mengeluarkan "benar".

Kemudian teruskan melihat bagaimana program ini akan dikeluarkan Anda boleh memikirkannya atau menjalankan program:

 package mainimport (
    "fmt")func main() {
    orderLen := 5
    order := make([]uint16, 2 * orderLen)
    pollorder := order[:orderLen:orderLen]
    lockorder := order[orderLen:][:orderLen:orderLen]
    fmt.Println("len(pollorder) = ", len(pollorder))
    fmt.Println("cap(pollorder) = ", cap(pollorder))
    fmt.Println("len(lockorder) = ", len(lockorder))
    fmt.Println("cap(lockorder) = ", cap(lockorder))}

Selepas menjalankan program di atas, teruskan dengan soalan menjadi lebih baik apabila anda melihatnya, dan anda akan berasa tercerahkan secara tiba-tiba Jika anda tidak mempercayainya, anda boleh mencuba:

  1. Program ini mentakrifkan susunan keping dengan panjang 10, pollorder dan. lockorder masing-masing memesan hirisan pesanan [start, stop, max] menjana kepingan, dan akhirnya program mencetak kapasiti dan panjang pesanan pollorder dan lockorder masing-masing.
  2. pesanan[start,stop,max] bermaksud tertib menghiris, julat penghirisan baharu ialah [mula, berhenti), dan kapasiti penghirisan baharu ialah maks. Panjang pesanan ialah 2 kali ganda pesananLen, kepingan pesanan tinjauan merujuk kepada separuh pertama pesanan, dan pesanan kunci merujuk kepada separuh kedua pesanan, iaitu, susunan asal dibahagikan kepada dua segmen. Oleh itu, panjang dan kapasiti pesanan pollorder dan pesanan loker kedua-duanya adalah orderLen, iaitu 5.

Artikel ini mengandungi beberapa penjelasan mengenai penggunaan Slice Saya harap ia dapat membantu rakan kongsi yang memerlukan Untuk maklumat lanjut tentang penggunaan Slice, sila tinggalkan mesej untuk membincangkan

Atas ialah kandungan terperinci Kongsi nota tentang menggunakan Slice in go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam