Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Selesaikan ralat golang: penegasan jenis tidak sah: 'x'.(T) (jenis bukan antara muka U di sebelah kiri)

Selesaikan ralat golang: penegasan jenis tidak sah: 'x'.(T) (jenis bukan antara muka U di sebelah kiri)

王林
王林asal
2023-08-25 15:03:371095semak imbas

解决golang报错:invalid type assertion: 'x'.(T) (non-interface type U on left)

Selesaikan ralat golang: penegasan jenis tidak sah: 'x'.(T) (jenis U bukan antara muka di sebelah kiri)

Kata Pengantar:

Dalam pembangunan Golang, menggunakan penegasan jenis ialah teknologi biasa, gunakan Tukar antara muka nilai jenis kepada jenis konkrit yang ditentukan. Walau bagaimanapun, apabila menggunakan penegasan jenis, kadangkala anda akan menghadapi ralat: penegasan jenis tidak sah: 'x'.(T) (jenis bukan antara muka U di sebelah kiri). Artikel ini akan memperincikan sebab ralat ini dan menyediakan penyelesaian.

Latar belakang masalah:

Di Golang, sintaks penegasan jenis adalah sangat mudah, biasanya ditulis sebagai: nilai.(Jenis), dengan nilai ialah nilai jenis antara muka dan Jenis ialah jenis tertentu. Penegasan jenis adalah selamat apabila jenis asas nilai adalah sama dengan Jenis atau Jenis ialah antara muka jenis asas nilai. Walau bagaimanapun, apabila jenis Jenis asas tidak serasi dengan nilai, ralat di atas akan berlaku.

Analisis masalah:

Mula-mula, mari kita lihat contoh mudah:

package main

import "fmt"

func main() {
    var x int = 10
    y := x.(float64)
    fmt.Println(y)
}

Dalam kod di atas, pembolehubah x ialah nilai jenis int. Apabila menggunakan penegasan jenis untuk menukar x kepada jenis float64, ralat di atas akan dicetuskan. Oleh kerana jenis int dan jenis float64 tidak serasi, penegasan jenis ini tidak sah.

Penyelesaian:

Untuk masalah di atas, kita boleh menyelesaikannya dengan cara berikut:

  1. Gunakan jenis yang betul

Dalam contoh di atas, kami cuba menukar nilai jenis int kepada jenis float64. Untuk menyelesaikan masalah ini, anda boleh terus mengisytiharkan x sebagai jenis float64 dan bukannya jenis int. Kod yang diubah suai adalah seperti berikut:

package main

import "fmt"

func main() {
    var x float64 = 10
    y := x.(float64)
    fmt.Println(y)
}
  1. Menggunakan penukaran jenis

Jika kita benar-benar perlu menukar nilai kepada jenis lain, kita boleh menggunakan operator penukaran jenis untuk menukar. Kod yang diubah suai adalah seperti berikut:

package main

import "fmt"

func main() {
    var x int = 10
    y := float64(x)
    fmt.Println(y)
}

Dalam contoh di atas, float64(x) digunakan untuk menukar nilai x jenis int kepada jenis float64.

  1. Gunakan mod penegasan jenis ok

Jika anda tidak pasti sama ada penegasan jenis akan berjaya, anda boleh menggunakan mod ok untuk mengelakkan ralat pelaporan. Contohnya adalah seperti berikut:

package main

import "fmt"

func main() {
    var x interface{} = 10
    if y, ok := x.(float64); ok {
        fmt.Println(y)
    } else {
        fmt.Println("无法转换为float64类型")
    }
}

Dalam contoh di atas, kami mengisytiharkan x sebagai jenis antara muka kosong dan menggunakan pernyataan if untuk menentukan sama ada penegasan jenis itu berjaya. Jika berjaya, cetak nilai yang ditukar jika gagal, cetak mesej segera.

Ringkasan:

Di Golang, penegasan jenis boleh digunakan untuk menukar nilai jenis antara muka kepada jenis konkrit yang ditentukan. Walau bagaimanapun, apabila jenis asas tidak serasi dengan jenis yang hendak ditukar, ralat akan dicetuskan: penegasan jenis tidak sah: 'x'.(T) (bukan antara muka jenis U di sebelah kiri). Kita boleh mengelakkan ralat ini dengan menggunakan jenis, penukaran jenis atau penegasan jenis yang betul dalam mod ok.

Atas ialah kandungan terperinci Selesaikan ralat golang: penegasan jenis tidak sah: 'x'.(T) (jenis bukan antara muka U di sebelah kiri). 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