首页 > 后端开发 > Golang > 如何解决Go通用接口中的'无法推断V:从约束实现推断类型参数”?

如何解决Go通用接口中的'无法推断V:从约束实现推断类型参数”?

Barbara Streisand
发布: 2024-12-10 01:49:08
原创
493 人浏览过

How to Resolve

Go 泛型接口中的错误解决:“无法推断 V:从约束实现推断类型参数”

在 Go 中,使用类型参数定义泛型接口可能会导致实施和使用时的推理问题。本文解决了这种情况下的错误“无法推断 V:从约束实现推断类型参数”。

问题描述

考虑一个带有类型参数 K 和 V 的接口 ConfigStorage,其中 V 扩展了 WritableType 。定义了该接口的文件系统存储实现 FileSystemStorage。然而,当尝试使用泛型函数 GetValue 时,由于无法推断 V 的类型,会出现编译错误。

解决方案

Go 1.21 及更高版本:

该问题在 Go 1.21 及更高版本中得到解决,因为类型推断已得到增强,可以考虑接口中的方法签名。方法签名中类型参数的类型参数可以从相应方法中的匹配参数中推断出来。

要在不指定类型约束的情况下使用 GetValue:

result, _ = GetValue(fileStorage, "key")
登录后复制

转到 1.20 及更低版本:

对于早期的 Go 版本,不支持从实现约束的类型推断 V。调用 GetValue 时必须提供显式类型参数:

GetValue[string, string](fileStorage, "key")
登录后复制

说明

出现错误是因为函数 GetValue 尝试从提供的参数推断 V 的类型:其第一个参数,存储,及其第二个参数 key。然而,这些参数本身并不能提供足够的信息来确定 V,因为存储是一个可以实现多种类型的接口值。

显式指定类型参数可以消除编译器的歧义。它允许类型推断算法根据提供的参数推断出 V 的正确类型。

以上是如何解决Go通用接口中的'无法推断V:从约束实现推断类型参数”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板