我正在连接数据库,获取一行,然后将其发送回用户。如果我找不到那行或者我有错误,我想要做的是return
语句。
因为我正在返回一个结构,所以我不能返回nil而且我得到了错误cannot use nil as type Item in return argument
(Item是我的结构)
我在线阅读如果我在return语句中使用指针并返回* Item而不是Item,那么我将能够传递nil,当我尝试创建item := *Item{}
时,我收到以下错误{{ 1}}
我认为有一些解决方案,但我找不到任何,我真正想知道的是:
这是我的代码:
invalid indirect of Item literal (type Item)
答案 0 :(得分:5)
您正在为item
变量分配错误。你说你试过item := *Item{}
,而创建指针的方法是通过使用new
内置函数,或者创建一个文字,以及地址操作符(&
) 。后者是你在golang中最常见的方法。在某些情况下,人们会使用new
,但在这种情况下,我会采用第二种方法:
所以:
item := &Item{}
// or
item := new(Item)
最后,您可以保持代码不变,只需在结尾处返回一个指针:
item := Item{}
// some code here
return &item, nil
如果您必须返回错误,您仍然可以return nil, err
所以把所有东西放在一起:
// return *Item instead of Item
func Handler(request Request) (*Item, error) {
// your code here, eg:
item := Item{}
if err := dynamodbattribute.UnmarshalMap(result.Item, &item); err != nil {
return nil, err
}
return &item, nil
}
或者,将item
指定为从开头
func Handler(request Request) (*Item, error) {
// your code here, eg:
item := &Item{}
if err := dynamodbattribute.UnmarshalMap(result.Item, item); err != nil {
return nil, err
}
return item, nil
}