一般的な型推論エラーには以下が含まれます: 任意の型への推論: 解決するには明示的な型アノテーションを使用します。推論された型の不一致: 明示的な戻り型の注釈を使用して解決されました。呼び出し中の型エラー: 戻り値の型をキャストするか、型アサーションを使用して解決します。
Go 言語の戻り値の型推論でよくあるエラーと解決策
Go 言語の型推論機能により、コードの記述が簡素化されます。 , しかし、場合によってはうまくいかないこともあります。一般的な型推論エラーとその解決策は次のとおりです。
1. any
型への推論
最も一般的なエラーは、戻り値の推論です。 value any
タイプの場合。これは通常、以下に示すように、匿名関数をコールバックとして使用するときに発生します。
func myFunc(arg int) any { return arg }
回避策: 明示的な型アノテーションを使用します。例:
func myFunc(arg int) int { return arg }
2. 一致しない型として推論されます。
もう 1 つのよくある間違いは、関数のシグネチャと一致しない型への戻り値を推論することです。たとえば、次の関数について考えてみましょう。
func myFunc(arg int) (int, error) { // ... }
関数が int
値のみを返す場合、型推論エラーが発生します。
func badFunc() { a, _ := myFunc(10) // a 的类型为 any }
回避策: 明示的な戻り値の型を使用します。アノテーション :
func badFunc() int { a, _ := myFunc(10) return a }
3. 呼び出し中に型エラーが発生する
呼び出し中に型推論エラーが発生する場合があります。たとえば、次のコードを考えてみましょう。
func myFunc() interface{} { return 10 } func badFunc() { var a int a = myFunc() // 错误:无法将 interface{} 转换为 int }
回避策: 戻り値の型をキャストするか、型アサーションを使用します。
func badFunc() { var a int a = myFunc().(int) // 强制转换 a, ok := myFunc().(int) // 类型断言 }
実用的なケース
以下は、型推論エラーを解決する方法を示す実際的なケースの 1 つです。
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 }
上記の修正されたコードは正しくコンパイルされ、期待される結果が出力されます。
以上がGo 言語の戻り値の型推論における一般的なエラーと解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。