我们使用openapi-generator来生成一个go-gin-server。这将生成包含*interface{}
类型属性的模型。
type Material struct {
Id *interface{} `json:"id,omitempty"`
Reference *interface{} `json:"reference,omitempty"`
}
如果我有一个这个结构体的示例,带有nil指针,如何设置这些指针?我尝试了以下方法:
theReturnId := "abc123"
material.Id = &theReturnId
这会产生编译错误:
无法将&theReturnId(类型为 *string的值)用作赋值中的 interface{}值: 字符串不实现 *interface{}(类型 interface{}是指向interface的指针,而不是interface)
theReturnId := "abc123"
*material.Id = theReturnId
这会产生指针为空的运行时错误。
我试过很多其他的方法,但是都没有用。我在这里错过了什么?谢谢!
2条答案
按热度按时间ijxebb2r1#
你几乎不需要一个指向接口的指针,你应该把接口作为值传递,但是底层数据仍然可以是一个指针。
您需要重新考虑您的设计/代码生成技术,不要使用这种方法,因为它不是Go语言的惯用方法。
如果你还想使用它,使用一个类型化的
interface{}
变量并获取它的地址,你在例子中所做的是不正确的,因为theReturnId
是一个字符串类型,获取它的地址意味着*string
类型,不能直接赋值给*interface{}
类型,因为Go语言是一种强类型语言erhoui1w2#
这会产生指针为空的运行时错误。
因为字段
Id
被设置为它的 * 零值 *,即:nil
,取消引用它(*material.Id
)会导致运行时错误。您可以为Material
编写一个构造函数,初始化其*interface{}
字段:现在,您可以安全地取消引用字段
Id
: