返回顶部
首页 > 资讯 > 精选 >有没有一种方法可以确保传递的值具有使用泛型的某些字段?
  • 641
分享到

有没有一种方法可以确保传递的值具有使用泛型的某些字段?

overflow 2024-02-10 16:02:54 641人浏览 安东尼
摘要

有没有一种方法可以确保传递的值具有使用泛型的某些字段?这是许多开发者在使用泛型时常常遇到的问题。在PHP中,我们可以通过类型约束和接口实现来实现这一功能。首先,我们可以使用类型约束来确

有没有一种方法可以确保传递的值具有使用泛型的某些字段?这是许多开发者在使用泛型时常常遇到的问题。在PHP中,我们可以通过类型约束和接口实现来实现这一功能。首先,我们可以使用类型约束来确保传递的值是某个类的实例。然后,我们可以使用接口来定义某些字段的规范,确保传递的值具有这些字段。这样,我们就可以在代码中使用泛型,并确保传递的值满足特定的字段要求。通过这种方式,我们可以更好地利用泛型的优势,并确保代码的可靠性和安全性。

问题内容

我试图在 Go 中定义一个通用函数,它接受具有某些字段的值,例如 id int。我尝试了几种方法,但似乎都不起作用。这是我尝试过的示例。

package main

import (
    "fmt"
)

func Print[T IDer](s T) {
    fmt.Print(s.ID)
}

func main() {
    Print(Person{3, "Test"})
}

type IDer interface {
    ~struct{ ID int }
}

type Person struct {
    ID   int
    Name string
}

type Store struct {
    ID     int
    Domain string
}

这是游乐场链接:https://gotipplay.golang.org/p/2i4rsucwagf

在上面的示例中,我想保证传递给 print 函数的每个值都有一个属性 id int,该属性也可以在函数中访问。有什么方法可以在 go 中实现此目的,而无需在接口中定义方法(例如 getid() int)?

解决方法

有什么方法可以在 go 中实现此目的,而无需在接口中定义方法(例如 getid() int)?

不,您必须在接口中定义方法。

go 1.18 中的泛型实现不支持结构类型,尽管原始类型参数提案建议支持。要访问联合中的公共字段,另请参阅 这个解释。

尽管如此,我认为值得指出一个很容易从您的示例中产生的误解:近似值 ~t (波形符类型)的含义意味着“基础类型为 t 的类型集。

现在,当你写:

~struct{ id int }

这意味着其基础类型完全struct{ id int }。无论如何,这不包括具有字段 id int 其他内容的结构。例如。 type foo struct { id int; 的底层类型;名称字符串 }struct { id int;命名字符串 },而不是 struct{ id int },这样无论如何都无法满足约束。

当前时间参数实现没有指定部分结构类型的语法。我记得提案在接口约束中添加字段术语(以及类型术语和方法) ),上线了:

type IDer interface {
    ID int
}

这将在不破坏波形符 ~ 的含义的情况下实现您想要执行的操作。但这不会包含在 go 1.18 中。

以上就是有没有一种方法可以确保传递的值具有使用泛型的某些字段?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 有没有一种方法可以确保传递的值具有使用泛型的某些字段?

本文链接: https://lsjlt.com/news/563146.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作