当前位置: 首页 > 面试题库 >

如何理解两个命名类型在golang中是相同的

终睿
2023-03-14
问题内容

类型标识规则规定:

Two named types are identical if their type names originate in the same TypeSpec

我不太了解两个类型名称是如何在同一TypeSpec中产生的。您能解释一下还是给我看一个例子?


问题答案:

一个类型名称只能源自TypeSpec。这就是重点。所以

type Foo int64
var x Foo
var y Foo

则两个都Foo起源于相同的TypeSpec,因此它们是相同Foo的。

但是,如果您有两个不同的文件(位于不同的程序包中):

前:

type Foo int64
var x Foo

b.go:

type Foo int64
var y Foo

那么,Foo在这种情况下,两个s是不相同的。即使它们是相同的类型名称,它们也源于不同的TypeSpec。这样做的结果是,类型xy不相同(且因此x = y不进行强制转换是不允许的)。



 类似资料:
  • 问题内容: 说我有两个结构: 我希望他们都实现接口A: 像这样对First和Second结构都实现似乎是多余的: 有没有一种方法可以为实现接口A的所有结构提供一个实现?像这样的东西,但似乎不起作用: 谢谢! 问题答案: 不,您不能, 但是 您可以创建一个基本类型,然后将其嵌入到您的2结构中,因此只需要一个基本类型的实现即可: 用法: 操场上的完整例子 嵌入文件

  • 问题内容: 以下代码可以正常工作。在两个不同的结构上操作并打印该结构的字段的两种方法: 在控制台中显示所需的输出: 现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数: 我什至无法编译程序: 问 :为什么 当 方法具有相同的名称和Arity 时 ,我可以在接收器中互换结构类型,而不能在参数中互换结构类型? 问题答案: 因为Go不支持在其参数类型上重载用户定

  • 我用的是spring soap ws。 我有以下对应于复杂类型的JAXB域类 我有以下带有@XmlRegistry注释的类 以下是endpoint 当我发出 Soap 请求时,我正在使用 soap 请求中的终结点中给出NAMESPACE_URI。 在这里,在这种情况下,我得到以下回应 如果我使用"超文本传输协议://命名空间/url"作为NAMESPACE_URI在endpoint和肥皂请求我得到

  • 我使用一个Android库,它要求我创建两个类,每个类继承自不同的类 (具有公共基类) 现在我有这个代码: 我必须复制这个类来创建一个扩展,即使我的两个类共享完全相同的代码。 我简化了示例的代码,但重复可能很重要 我决定将代码放在这两个类之外的静态方法中,并在类重写的方法中调用它们,但我认为必须有一种更干净的方法来做到这一点。 你能帮我解决这个问题吗? 和都继承自。

  • 问题内容: 我知道我可以在Swift中检查var的类型 但是如何检查两个实例具有相同的类?以下内容不起作用: 我可以轻松地添加一个“类”函数,并在每个子类中对其进行更新,以返回唯一的内容,但这似乎有点麻烦。 问题答案: 我觉得有必要首先引用 Swift编程语言 文档: 类具有 结构没有的 其他功能: 通过类型转换,您可以在运行时检查和解释类实例的类型。 因此,这对将来的某人可能会有所帮助: 和测试

  • 获取JAXB异常,如“两个类具有相同的XML类型名称…”, 以下是例外情况的详细信息: 异常在线程"main"com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsExcema: 1计数的IllegalAnnotationExceptions两个类有相同的XML类型名称"城市"。使用@XmlType.name和@XmlType.namespa