Rumah >pembangunan bahagian belakang >Golang >ralat golang: 'tidak boleh menggunakan x (jenis y) sebagai jenis z dalam medan...' Bagaimana untuk menyelesaikannya?

ralat golang: 'tidak boleh menggunakan x (jenis y) sebagai jenis z dalam medan...' Bagaimana untuk menyelesaikannya?

WBOY
WBOYasal
2023-06-24 13:42:071354semak imbas

Dalam pembangunan golang, kita sering menghadapi ralat berikut: "tidak boleh menggunakan x (jenis y) sebagai jenis z dalam medan…". Ralat ini biasanya disebabkan oleh ketidakpadanan jenis apabila kami menetapkan nilai.

Berikut ialah beberapa senario yang mungkin menyebabkan ralat ini dan penyelesaiannya:

  1. Jenis medan dalam struktur tidak sepadan

Apabila kita mentakrifkan berbilang medan dalam struktur, dan beberapa medan Ralat ini berlaku apabila jenis tidak sepadan. Contohnya:

type Person struct {
    Name string
    Age  int
    Height float32
}
 
type Employee struct {
    Name   string
    Age    int
    Salary float32
}
 
func main() {
    var p Person
    var e Employee
 
    p = e
}

Mesej ralat berikut akan digesa: "tidak boleh menggunakan e (taip Pekerja) sebagai jenis Orang dalam tugasan". Oleh kerana medan struktur Orang dan Pekerja tidak sepadan, mereka tidak boleh memberikan nilai antara satu sama lain. Penyelesaiannya adalah sama ada mentakrifkan semula struktur atau menaip dua struktur supaya jenis medannya sepadan.

  1. Gunakan tugasan jenis antara muka

Apabila kami menggunakan pembolehubah jenis antara muka untuk tugasan, ralat ini juga mungkin berlaku. Contohnya:

type Person interface {
   GetName() string
   GetAge() int
}
 
type Employee struct {
    Name   string
    Age    int
    Salary float32
}
 
func (e *Employee) GetName() string {
    return e.Name
}
 
func (e *Employee) GetAge() int {
    return e.Age
}
 
func main() {
    var p Person
    var e Employee
 
    p = e
}

Mesej ralat berikut akan digesa: "tidak boleh menggunakan e (taip Pekerja) sebagai jenis Orang dalam tugasan: Pekerja tidak melaksanakan Orang (kaedah GetAge hilang)". Oleh kerana Pekerja tidak melaksanakan kaedah GetAge() dalam antara muka Orang, ia tidak boleh diberikan kepada pembolehubah jenis Orang. Penyelesaiannya ialah menambah kaedah GetAge() dalam struktur Pekerja atau mentakrifkan semula struktur yang melaksanakan antara muka Orang.

  1. Ralat penukaran jenis

Ralat ini juga mungkin berlaku apabila kita menukar pembolehubah jenis yang berbeza. Contohnya:

var a int
var b int32
 
a = b //cannot use b (type int32) as type int in assignment
a = int(b)

Mesej ralat berikut akan digesa: "tidak boleh menggunakan b (taip int32) sebagai taip int dalam tugasan". Oleh kerana b adalah jenis int32, ia tidak boleh ditugaskan terus kepada pembolehubah a jenis int penukaran perlu digunakan untuk menukar b kepada jenis int.

Ringkasan:

Apabila menggunakan pelbagai jenis tugasan dalam golang, anda mesti memberi perhatian kepada isu pemadanan taip, terutamanya padanan medan dan kaedah dalam jenis struktur dan antara muka. Apabila menukar jenis, pastikan penukaran jenis boleh dilaksanakan, jika tidak, masalah ketidakpadanan jenis juga akan berlaku. Kami perlu menyemak semula kod kami untuk memastikan pembolehubah kami adalah jenis yang betul dan berwaspada terhadap kemungkinan senario ralat.

Atas ialah kandungan terperinci ralat golang: 'tidak boleh menggunakan x (jenis y) sebagai jenis z dalam medan...' Bagaimana untuk menyelesaikannya?. 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