gpt4 book ai didi

go - 无法根据 Golang 中的条件将接口(interface)转换为结构

转载 作者:数据小太阳 更新时间:2023-10-29 03:21:19 25 4
gpt4 key购买 nike

我在下面添加了两个结构,我正在尝试创建一个通用函数,在该函数中我将结构名称作为字符串传递。我最近开始研究 Go。

type UserDetail struct {
FirstName string
LastName string
Email string
User int
ReportsTo int
}

type Matter struct {
ID int
Name string
Active bool
CreatedAt time.Time
UpdatedAt time.Time
UserID int
}

下面添加了函数片段

func Testing(model string) {
var temp interface{}
if model == "UserDetail" {
fmt.Println("Enterr...")
temp = UserDetail{}
}
temp.FirstName = "Dev"
temp.Email = "dev@gmail.com"
fmt.Println(temp) // {"", "", "", 0, 0}
}

我将函数调用为 Testing("UserDetail")

我使用结构名称作为字符串调用函数,在函数定义中,基于结构名称,我通过转换空接口(interface)来创建所需的结构实例。创建空结构实例后,如果我尝试向其中添加任何字段值,并尝试打印变量,它会给我一个错误提示:

prog.go:33:6: temp.FirstName undefined (type I is interface with no methods)
prog.go:34:6: temp.Email undefined (type I is interface with no methods)

如果我不更新变量字段,它会使用默认值打印变量。我的主要动机是根据条件将接口(interface)转换为结构,并在整个函数中使用转换后的变量。

最佳答案

在最终能够修改它的属性之前,您需要从接口(interface)获取底层的具体值。

在golang中,有一个叫做type assertions的东西。 ,它用于从接口(interface)变量中获取具体值。

A type assertion provides access to an interface value's underlying concrete value.

使用示例:

tempConcreteValue := temp.(UserDetail)
tempConcreteValue.FirstName = "Dev"
tempConcreteValue.Email = "dev@gmail.com"

fmt.Println(tempConcreteValue) // {"", "", "", 0, 0}

正如我们在上面的代码中看到的,temp 末尾的.(UserDetail) 将返回接口(interface)temp 的具体值>,在 UserDetail 类型中。

关于go - 无法根据 Golang 中的条件将接口(interface)转换为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53426779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com