Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara membetulkan ralat golang: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U sebagai hujah balasan

Cara membetulkan ralat golang: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U sebagai hujah balasan

WBOY
WBOYasal
2023-08-27 09:30:16983semak imbas

如何修复golang报错:cannot use 'x' (type T) as type U in return argument

Cara membetulkan ralat golang: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U sebagai hujah balasan

Dalam pembangunan golang, anda sering menghadapi pelbagai mesej ralat. Salah satu ralat biasa ialah: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U sebagai hujah balasan. Ralat ini biasanya berlaku apabila jenis nilai pulangan fungsi tidak sepadan. Artikel ini menerangkan cara membetulkan ralat ini dan menyediakan beberapa contoh kod.

Mula-mula, mari kita lihat latar belakang dan sebab ralat ini. Dalam golang, jenis nilai pulangan perlu dinyatakan semasa mengisytiharkan fungsi. Ralat ini berlaku apabila jenis nilai pulangan fungsi tidak sepadan dengan jenis nilai pulangan sebenar. Masalah ini biasanya berlaku dalam situasi berikut:

  1. Jenis nilai pulangan yang diisytiharkan oleh fungsi adalah tidak konsisten dengan jenis yang sebenarnya dikembalikan oleh fungsi.
  2. Fungsi mengembalikan berbilang nilai, tetapi hanya sebahagian daripada nilai pulangan diproses oleh fungsi atau kod lain.

Di bawah kami akan menerangkan kedua-dua situasi ini masing-masing, dan memberikan kaedah pembaikan dan contoh kod yang sepadan.

  1. Jenis nilai pulangan yang diisytiharkan oleh fungsi adalah tidak konsisten dengan jenis yang sebenarnya dikembalikan oleh fungsi

Dalam kes ini, kita perlu menyemak sama ada jenis nilai pulangan yang diisytiharkan oleh fungsi itu konsisten dengan jenis yang sebenarnya dikembalikan oleh fungsi. Jika ia tidak konsisten, anda perlu mengubah suai jenis nilai pulangan untuk menjadikannya konsisten dengan jenis yang sebenarnya dikembalikan oleh fungsi tersebut.

Sebagai contoh, dalam kod sampel di bawah, fungsi tambah mengembalikan jumlah dua integer, tetapi jenis nilai pulangan yang diisytiharkan oleh fungsi ialah rentetan. Ini akan menyebabkan pengkompil melaporkan ralat: tidak boleh menggunakan 'add(1, 2)' (type int) sebagai rentetan jenis dalam hujah balasan.

package main

import "fmt"

func add(x, y int) string {
    return x + y // 返回的类型应该是int,而不是string
}

func main() {
    result := add(1, 2)
    fmt.Println(result)
}

Untuk menyelesaikan masalah ini, kita hanya perlu menukar jenis nilai pulangan pengisytiharan fungsi kepada int.

package main

import "fmt"

func add(x, y int) int {
    return x + y
}

func main() {
    result := add(1, 2)
    fmt.Println(result)
}
  1. Fungsi ini mengembalikan berbilang nilai, tetapi fungsi atau kod lain hanya mengendalikan beberapa nilai yang dikembalikan

Dalam kes ini, kita perlu memastikan bahawa fungsi atau kod lain boleh mengendalikan semua nilai yang dikembalikan dengan betul oleh fungsi. Jika tidak, pengkompil akan melaporkan ralat: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U dalam hujah balasan.

Sebagai contoh, dalam kod sampel di bawah, fungsi div mengembalikan hasil bagi dan baki dua integer. Tetapi dalam fungsi utama, hanya bahagian hasil bagi nilai pulangan diproses, dan selebihnya bahagian nilai pulangan diabaikan. Ini akan menyebabkan pengkompil melaporkan ralat: tidak boleh menggunakan 'div(10, 3)' (type int) sebagai rentetan jenis dalam hujah balasan.

package main

import "fmt"

func div(x, y int) (int, int) {
    return x / y, x % y
}

func main() {
    result := div(10, 3)
    fmt.Println(result)
}

Untuk menyelesaikan masalah ini, kita perlu menggunakan ruang letak dalam fungsi utama atau menetapkan nilai pulangan kepada berbilang pembolehubah untuk menerima semua nilai yang dikembalikan oleh fungsi tersebut.

Satu penyelesaian ialah menggunakan pemegang tempat "_" untuk mengabaikan nilai pulangan yang tidak perlu diproses:

package main

import "fmt"

func div(x, y int) (int, int) {
    return x / y, x % y
}

func main() {
    quotient, _ := div(10, 3)
    fmt.Println(quotient)
}

Penyelesaian lain ialah menetapkan nilai pulangan kepada berbilang pembolehubah untuk menerima semua nilai yang dikembalikan oleh fungsi:

package main

import "fmt"

func div(x, y int) (int, int) {
    return x / y, x % y
}

func main() {
    quotient, remainder := div(10, 3)
    fmt.Println(quotient, remainder)
}

Dengan dua kaedah pembaikan di atas, kita boleh menyelesaikan masalah ketidakpadanan jenis nilai pulangan fungsi. Ini bukan sahaja mengelakkan ralat penyusunan, tetapi juga memastikan ketepatan dan kebolehbacaan kod.

Ringkasnya, apabila menghadapi ralat golang "tidak boleh menggunakan 'x' (jenis T) sebagai jenis U dalam hujah balasan", kita perlu menyemak sama ada jenis nilai pulangan yang diisytiharkan oleh fungsi itu konsisten dengan jenis yang sebenarnya dikembalikan oleh fungsi, dan memastikan fungsi atau kod lain boleh mengendalikan semua nilai yang dikembalikan oleh fungsi dengan betul. Dengan membuat pembetulan yang sesuai, kita boleh mendapatkan kod untuk menyusun, dijalankan dan mendapatkan hasil yang betul.

Atas ialah kandungan terperinci Cara membetulkan ralat golang: tidak boleh menggunakan 'x' (jenis T) sebagai jenis U sebagai hujah balasan. 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