首页  >  文章  >  后端开发  >  如何在 Golang 中访问作为没有方法的接口传递的匿名结构体的字段?

如何在 Golang 中访问作为没有方法的接口传递的匿名结构体的字段?

Linda Hamilton
Linda Hamilton原创
2024-11-04 11:54:01873浏览

How to Access Fields of an Anonymous Struct Passed as an Interface with No Methods in Golang?

没有方法的接口:访问 Golang 中的自定义类型

在 Golang 中,您可以创建匿名结构并将它们作为参数传递给接受接口类型的函数。但是,如果接口没有定义任何方法,您将无法直接访问匿名结构体的字段。

请考虑以下代码示例:

<code class="go">func NewJob(t string, name string, c func(), v interface{}) {
    // ...
}

func Custom(name string) interface{} {
    // ...
}

main() {
    gojob.NewJob("every 2 seconds", "pene", func() {
        t := gojob.Custom("pene")
        fmt.Println(t) // Prints "{1}"
        fmt.Println(t.Id) // Error: t.Id undefined (type interface {} is interface with no methods)
    }, struct {
        Id int
    }{
        1,
    })
}</code>

在此示例中,我们将匿名结构作为 v 参数传递给 NewJob。函数 Custom 检索与名称“pene”关联的自定义值并将其作为接口{}返回。

当我们尝试访问 goroutine 中匿名结构的 Id 字段时,我们遇到错误“ t.Id 未定义”。这是因为 interface{} 类型没有定义的方法,因此我们不能将其视为具体类型。

要访问匿名结构体的字段,我们需要将其断言为兼容类型。在本例中,我们知道 v 包含一个带有 int 类型 Id 字段的匿名结构。我们可以使用以下语法键入断言:

<code class="go">id := v.(struct{Id int}).Id</code>

这会将 interface{} 值 v 转换为带有 Id 字段的具体结构,允许我们直接访问它。

通过类型断言 interface{} 值,我们可以访问匿名结构体的字段并根据需要使用它们。

以上是如何在 Golang 中访问作为没有方法的接口传递的匿名结构体的字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn