Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menyelesaikan golang membuang masalah kegagalan

Bagaimana untuk menyelesaikan golang membuang masalah kegagalan

PHPz
PHPzasal
2023-04-05 09:09:06766semak imbas

Golang ialah bahasa pengaturcaraan yang berkembang pesat Ia digemari oleh semakin ramai pembangun kerana kelebihannya seperti kesederhanaan, kemudahan pembelajaran, kecekapan dan kestabilan. Walau bagaimanapun, walaupun dalam bahasa pengaturcaraan yang begitu baik, akan ada beberapa masalah, seperti kegagalan panggilan fungsi alih keluar semasa membangunkan menggunakan Golang.

fungsi buang ialah kaedah dalam Golang untuk memadamkan elemen yang ditentukan Bentuknya yang paling biasa digunakan ialah:

func remove(slice []Type, elem Type) []Type

Antaranya, slice mewakili hirisan yang akan dikendalikan dan elem mewakili hirisan kepada. dipadamkan. Apabila menggunakan fungsi ini, kita juga perlu memberi perhatian kepada perkara berikut:

  • Kepingan yang dilalui mestilah objek hirisan.
  • Elem yang dilalui mestilah daripada jenis yang sama dengan elemen dalam kepingan.
  • Selepas memanggil fungsi, objek hirisan baharu akan dikembalikan, yang tidak akan mengandungi elemen yang dipadamkan.

Namun, kadangkala apabila memanggil fungsi alih keluar, kami akan mendapati ia tidak berfungsi seperti yang kami jangkakan. Contohnya, contoh berikut:

package main

import "fmt"

func main() {
    // create slice
    slice := []int{1, 2, 3, 4, 5}

    // remove element
    slice = remove(slice, 3)

    // print slice
    fmt.Println(slice)
}

func remove(slice []int, elem int) []int {
    for i, v := range slice {
        if v == elem {
            return append(slice[:i], slice[i+1:]...)
        }
    }
    return slice
}

Dalam contoh ini, kami mentakrifkan fungsi bernama remove, yang akan memadamkan elemen 3 dalam kepingan apabila ia dipanggil. Walaupun nampaknya tiada masalah dalam kod tersebut, apabila kami menjalankannya, kami mendapati bahawa hasil keluaran bukanlah {1,2,4,5} yang kami jangkakan, tetapi {1,2,4,5,5} .

Jadi, di manakah letak masalah ini? Mari kita lihat pelaksanaan kod fungsi alih keluar:

func remove(slice []int, elem int) []int {
    for i, v := range slice {
        if v == elem {
            return append(slice[:i], slice[i+1:]...)
        }
    }
    return slice
}

Dalam fungsi ini, kita mula-mula melintasi keseluruhan kepingan dan mencari elemen untuk dipadamkan. Kemudian, kami memanggil fungsi tambah untuk menyertai semula dua bahagian elemen dalam kepingan untuk mencapai pemadaman.

Walau bagaimanapun, terdapat masalah yang jelas dengan operasi sedemikian: jika elemen yang akan dipadamkan terletak pada kedudukan terakhir hirisan, maka kami sebenarnya tidak melakukan sebarang operasi pada hirisan, jadi hirisan yang dikembalikan adalah sama dengan parameter input , yang menghasilkan dua elemen yang sama dalam kepingan.

Jadi, bagaimana untuk menyelesaikan masalah ini? Sebenarnya, ia adalah sangat mudah. ​​Kita hanya perlu merekodkan subskrip elemen semasa proses traversal, dan menentukan sama ada subskrip itu sama dengan panjang kepingan tolak satu sebelum operasi pemadaman. Kod yang diubah suai adalah seperti berikut:

func remove(slice []int, elem int) []int {
    for i, v := range slice {
        if v == elem {
            if i == len(slice)-1 {
                return slice[:i]
            }
            return append(slice[:i], slice[i+1:]...)
        }
    }
    return slice
}

Dengan pengubahsuaian ini, kami boleh memadamkan elemen yang ditentukan dengan betul apabila memanggil fungsi alih keluar, mengelakkan masalah ketidakupayaan untuk memadam dan menduplikasi elemen.

Ringkasnya, Golang mempunyai beberapa masalah apabila menggunakan fungsi alih keluar. Melalui analisis dan penyelesaian masalah, kami dapat memahami dan menggunakan bahasa ini dengan lebih mendalam, dan juga boleh meningkatkan kecekapan pembangunan dengan lebih baik dan membawa kemudahan kepada kerja kami.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan golang membuang masalah kegagalan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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