Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Selesaikan ralat golang: jenis penerima tidak sah 'x' ('x' bukan jenis yang ditentukan), penyelesaian

Selesaikan ralat golang: jenis penerima tidak sah 'x' ('x' bukan jenis yang ditentukan), penyelesaian

PHPz
PHPzasal
2023-08-26 10:31:541509semak imbas

解决golang报错:invalid receiver type 'x' ('x' is not a defined type),解决方法

Penyelesaian kepada ralat golang: jenis penerima tidak sah 'x' ('x' bukan jenis yang ditentukan), penyelesaian

Dalam proses pengaturcaraan dengan Golang, kita sering menghadapi pelbagai ralat. Salah satu ralat biasa ialah "jenis penerima tidak sah 'x' ('x' bukan jenis yang ditentukan)". Mesej ralat ini bermakna kami menggunakan jenis yang tidak ditentukan sebagai penerima semasa mengisytiharkan kaedah tersebut. Dalam artikel ini, saya akan menunjukkan kepada anda cara menyelesaikan masalah ini dan memberikan contoh kod yang sepadan.

Apabila ralat di atas berlaku, mula-mula kita perlu menyemak sama ada jenis penerima dalam kod ditakrifkan dengan betul. Jenis penerima ialah jenis yang mendahului senarai parameter dalam pengisytiharan kaedah. Kita perlu memastikan bahawa jenis penerima adalah jenis yang ditentukan dan bukan jenis yang tidak wujud.

Mari kita lihat contoh kod:

package main

import "fmt"

type Point struct {
    X int
    Y int
}

func (p Point) Print() {
    fmt.Printf("Point coordinates: (%d, %d)
", p.X, p.Y)
}

func main() {
    p := Point{X: 1, Y: 2}
    p.Print()
}

Kod di atas mentakrifkan struktur bernama Point dan mentakrifkan kaedah Cetak untuknya. Dalam kaedah Cetak, kami menggunakan jenis Titik sebagai jenis penerima. Dengan cara ini, kita boleh memanggil kaedah Cetak melalui pembolehubah jenis Titik untuk mencetak koordinat titik.

Namun, jika kami tersilap menggunakan jenis yang tidak ditentukan sebagai jenis penerima dalam kod, ia akan menyebabkan ralat "jenis penerima tidak sah". Mari lihat contoh kod yang diubah suai:

package main

import "fmt"

type Point struct {
    X int
    Y int
}

type Polygon []Point

func (p Polygon) Print() {
    for _, point := range p {
        fmt.Printf("Polygon point coordinates: (%d, %d)
", point.X, point.Y)
    }
}

func main() {
    poly := Polygon{{X: 1, Y: 2}, {X: 3, Y: 4}, {X: 5, Y: 6}}
    poly.Print()
}

Dalam kod yang diubah suai, kami mentakrifkan jenis Poligon, iaitu sekeping Titik. Kemudian kami cuba menggunakan jenis Poligon sebagai jenis penerima kaedah Cetak. Memandangkan jenis Poligon ditakrifkan oleh kami sendiri dan tidak ditakrifkan oleh perpustakaan standard atau di tempat lain, pengkompil akan melaporkan ralat "jenis penerima tidak sah 'Polygon' ('Polygon' bukan jenis yang ditentukan)".

Untuk menyelesaikan masalah ini, kita perlu menukar jenis penerima kepada jenis yang telah ditetapkan Sebagai contoh, kita boleh menukar jenis penerima kepada penunjuk kepada jenis Poligon:

func (p *Polygon) Print() {
    for _, point := range *p {
        fmt.Printf("Polygon point coordinates: (%d, %d)
", point.X, point.Y)
    }
}

Selepas pengubahsuaian ini, kita boleh berjaya menyusun. dan jalankan kod tanpa ralat "jenis penerima tidak sah".

Ringkasan:
Untuk menyelesaikan ralat "jenis penerima tidak sah 'x' ('x' bukan jenis yang ditentukan)" dalam golang, anda perlu menyemak sama ada jenis penerima dalam kod ditakrifkan dengan betul. Jika jenis penerima adalah jenis yang tidak ditentukan, ia perlu diubah suai kepada jenis yang ditentukan. Secara umum, menukar jenis penerima kepada penunjuk kepada jenis itu adalah penyelesaian biasa. Dengan menganalisis punca ralat dan membuat pengubahsuaian mengikut situasi sebenar, kita boleh menyelesaikan masalah ini dengan mudah.

Atas ialah kandungan terperinci Selesaikan ralat golang: jenis penerima tidak sah 'x' ('x' bukan jenis yang ditentukan), 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