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

PHPz
Lepaskan: 2023-06-24 13:12:53
asal
1566 orang telah melayarinya

Sistem jenis bahasa Go adalah agak ketat Apabila kita memanggil fungsi atau kaedah, parameter pelbagai jenis tidak boleh ditukar antara satu sama lain, jika tidak, ralat tidak sepadan jenis akan berlaku. Dalam pembangunan golang, anda akan menghadapi beberapa ralat dalam bentuk "tidak boleh menggunakan x (jenis y) sebagai jenis z dalam argumen..." Mesej ralat ini dijelaskan sebagai: apabila fungsi dipanggil, parameter x jenis y digunakan sebagai parameter jenis z, mengakibatkan ketidakpadanan jenis. Jadi, bagaimana untuk menyelesaikan masalah ini?

1. Sahkan sama ada jenis data adalah konsisten

Pertama sekali, apabila masalah ini berlaku, kita perlu menyemak sama ada jenis data parameter adalah konsisten. Apabila memanggil fungsi atau kaedah, anda boleh menggunakan arahan "fmt.Printf("%T",var)" untuk menentukan jenis data pembolehubah. Jika terdapat ketidakpadanan, pertimbangkan untuk menukar jenis data.

Sebagai contoh, kami mempunyai sekeping kod:

var num1 int32 = 10
var num2 int64
num2 = num1
Salin selepas log masuk

Dalam kod ini, num1 daripada jenis int32, dan num2 daripada jenis int64 akan terdapat masalah jenis tidak sepadan apabila menetapkan nilai. Penyelesaiannya adalah untuk menukar num1 kepada jenis int64 Kodnya adalah seperti berikut:

num2 = int64(num1)
Salin selepas log masuk

Dengan cara ini, nilai num1 boleh ditukar kepada jenis int64 dan diberikan kepada num2.

2. Gunakan penegasan jenis

Apabila kita perlu menukar pembolehubah jenis antara muka kepada jenis lain, kita boleh menggunakan fungsi penegasan jenis. Penegasan jenis ialah proses menukar jenis antara muka kepada jenis antara muka lain atau jenis data tertentu. Apa yang perlu diperhatikan di sini ialah jika penegasan jenis gagal, ia akan menyebabkan panik masa jalan, dan anda perlu menggunakan ok untuk menerima hasilnya.

Sebagai contoh, kami mempunyai antara muka jenis x pembolehubah{} dan kami perlu menukarnya kepada jenis int. Kodnya adalah seperti berikut:

var x interface{} = 5
intX, ok := x.(int)
if ok {
    fmt.Println(intX)
} else {
    fmt.Println("x不是int类型")
}
Salin selepas log masuk

Dalam kod ini, kami menggunakan penegasan jenis untuk menukar pembolehubah x kepada menaip int Jika penukaran berjaya, nilai akan dikeluarkan, jika tidak, "x bukan jenis int".

3. Gunakan jenis penunjuk

Dalam golang, jenis penunjuk adalah konsep yang agak penting. Apabila kita perlu menukar nilai pembolehubah atau ingin menyimpan beberapa memori, menggunakan jenis penunjuk boleh memainkan peranan yang baik.

Sebagai contoh, kita mempunyai fungsi yang perlu mengubah suai nilai pembolehubah x:

func changeX(x int) {
    x = 10
}
Salin selepas log masuk

Dalam fungsi tersebut, kita menukar nilai pembolehubah x, tetapi hasil yang dijalankan tidak akan memberi kesan kepada pembolehubah x. Penyelesaiannya adalah dengan menggunakan jenis penunjuk Kita boleh mengubah suai pembolehubah dengan menghantar alamat pembolehubah kepada fungsi.

func changeX(x *int) {
    *x = 10
}

var num int = 5
changeX(&num)
fmt.Println(num) //输出10
Salin selepas log masuk

Dalam kod ini, kami mengubah suai nombor pembolehubah dengan menghantar alamat nombor pembolehubah kepada fungsi changeX.

Ringkasan

Untuk mesej ralat "tidak boleh menggunakan x (jenis y) sebagai jenis z dalam hujah...", kita perlu mengesahkan sama ada jenis data pembolehubah adalah konsisten dan melakukan penukaran jenis, gunakan penegasan jenis atau gunakan penunjuk untuk pembolehubah tidak konsisten Jenis dan kaedah lain untuk menyelesaikan. Dalam pembangunan golang, cekap menangani masalah sebegini dapat meningkatkan kualiti dan kecekapan penulisan kod.

Atas ialah kandungan terperinci ralat golang: 'tidak boleh menggunakan x (jenis y) sebagai jenis z dalam hujah...' Bagaimana untuk menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!