Ralat inferens jenis biasa termasuk: Inferens kepada mana-mana jenis: Gunakan anotasi jenis eksplisit untuk diselesaikan. Jenis tidak sepadan yang disimpulkan: diselesaikan menggunakan anotasi jenis pulangan yang jelas. Ralat taip semasa panggilan: selesaikan dengan menghantar jenis nilai pulangan atau menggunakan penegasan jenis.
Ralat dan penyelesaian biasa dalam inferens jenis nilai pulangan bahasa Go
Ciri inferens jenis bahasa Go memudahkan penulisan kod, tetapi kadangkala ia boleh menjadi salah. Berikut ialah ralat inferens jenis biasa dan penyelesaiannya:
1 Inferens kepada jenis any
类型
最常见的错误是将返回值推断为 any
类型。这通常发生在使用匿名函数作为回调时,如下所示:
func myFunc(arg int) any { return arg }
解决方法:使用明确的类型注释,例如:
func myFunc(arg int) int { return arg }
二、推断为不匹配的类型
另一个常见错误是将返回值推断为与函数签名不匹配的类型。例如,考虑以下函数:
func myFunc(arg int) (int, error) { // ... }
如果函数仅返回一个 int
Ralat yang paling biasa ialah membuat kesimpulan nilai pulangan kepada jenis
func badFunc() { a, _ := myFunc(10) // a 的类型为 any }
Penyelesaian: Gunakan anotasi jenis eksplisit, seperti: func badFunc() int {
a, _ := myFunc(10)
return a
}
Satu lagi nilai yang biasa adalah untuk mengembalikan disimpulkan kepada jenis yang tidak sepadan dengan tandatangan fungsi. Sebagai contoh, pertimbangkan fungsi berikut:
func myFunc() interface{} { return 10 } func badFunc() { var a int a = myFunc() // 错误:无法将 interface{} 转换为 int }
Jika fungsi mengembalikan nilai int
sahaja, ralat inferens jenis berlaku: func badFunc() {
var a int
a = myFunc().(int) // 强制转换
a, ok := myFunc().(int) // 类型断言
}
package main import "fmt" func main() { // 错误:类型推断为 any result, _ := f(10) // 解决方法:明确返回类型注释 r, _ := f1(10) fmt.Println(result, r) } func f(arg int) any { return arg * 2 } func f1(arg int) int { return arg * 2 }
Atas ialah kandungan terperinci Ralat dan penyelesaian biasa dalam inferens jenis nilai pulangan dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!