Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Selesaikan ralat golang: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U dalam indeks peta, penyelesaian

Selesaikan ralat golang: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U dalam indeks peta, penyelesaian

WBOY
WBOYasal
2023-08-18 16:25:491367semak imbas

解决golang报错:cannot use 'x' (type T) as type U in map index,解决方法

Penyelesaian kepada ralat golang: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U dalam indeks peta, penyelesaian

Apabila menggunakan pengaturcaraan golang, kita mungkin menghadapi pelbagai ralat. Salah satunya ialah ralat "tidak boleh menggunakan 'x' (jenis T) sebagai jenis U dalam indeks peta" apabila menggunakan peta. Ralat ini kelihatan agak kabur, tetapi maknanya sebenarnya sangat mudah, iaitu, kami cuba menggunakan jenis yang salah sebagai indeks peta.

Untuk lebih memahami ralat ini, mari lihat contoh khusus:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    m := make(map[Person]bool)
    p := Person{Name: "Alice", Age: 20}

    m[p] = true
}

Dalam contoh di atas, kami cuba menggunakan struktur jenis "Orang" sebagai indeks peta. Walau bagaimanapun, kita tahu bahawa indeks peta mestilah daripada jenis yang setanding. Jenis struktur tidak boleh dibandingkan, jadi pengkompil akan melaporkan ralat: "tidak boleh menggunakan 'p' (jenis Orang) sebagai jenis Orang dalam indeks peta".

Jadi, bagaimana untuk menyelesaikan masalah ini?

Penyelesaian 1: Tukar jenis struktur kepada jenis yang setanding

Satu penyelesaian ialah menukar jenis struktur kepada jenis yang setanding. Dalam golang, kita boleh menggunakan rentetan atau integer sebagai indeks peta. Oleh itu, kita boleh menggabungkan medan dalam struktur menjadi rentetan atau integer, dan kemudian menggunakannya sebagai indeks peta.

Berikut ialah kod sampel:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    m := make(map[string]bool)
    p := Person{Name: "Alice", Age: 20}
    key := fmt.Sprintf("%s-%d", p.Name, p.Age)

    m[key] = true
}

Dalam kod di atas, kami menggabungkan medan Nama dan medan Umur dalam struktur "Orang" ke dalam rentetan, dan kemudian menggunakan rentetan sebagai indeks peta. Ini akan menyelesaikan masalah pelaporan ralat.

Penyelesaian 2: Gunakan jenis penunjuk sebagai indeks peta

Penyelesaian lain ialah menggunakan jenis penunjuk sebagai indeks peta. Jenis penunjuk boleh dibandingkan, jadi penunjuk boleh digunakan secara langsung sebagai indeks peta.

Berikut ialah contoh kod:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    m := make(map[*Person]bool)
    p := &Person{Name: "Alice", Age: 20}

    m[p] = true
}

Dalam kod di atas, kami menggunakan jenis penunjuk "*Orang" sebagai indeks peta, supaya masalah ralat dapat diselesaikan.

Ringkasan:

Apabila pengaturcaraan dalam golang, kami menghadapi ralat "tidak boleh menggunakan 'x' (jenis T) sebagai jenis U dalam indeks peta" kerana kami cuba menggunakan jenis yang salah sebagai indeks peta. Terdapat dua cara untuk menyelesaikan ralat ini: tukar jenis struktur kepada jenis yang setanding, atau gunakan jenis penunjuk sebagai indeks peta.

Saya harap pengenalan artikel ini dapat membantu pembaca lebih memahami dan menyelesaikan masalah ralat ini. Jadikan pengaturcaraan golang kami lebih lancar dan cekap!

Atas ialah kandungan terperinci Selesaikan ralat golang: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U dalam indeks peta, penyelesaian. 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