在 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中文网其他相关文章!