变量声明的方式的区别?

来源:2-7 指针

拧壶冲

2020-11-15

老师,你好。
我看到变量的声明有不同的方式。比如:
(1) item := Item{}
也有
(2) item := &Item{}
也有
(3) item := new(Item)

我的理解 1和3是一样的,但是2是得到新对象的地址。但是1与2的区别是什么呢?比如在下面的情况下,有什么区别吗?

func GetItem() (Item, error) {
	return &Item{}, error
}

// 这个代码好像会编译前就报错
func GetItem() (Item, error) {
	return Item{}, error
}
写回答

1回答

ccmouse

2020-11-15

2和3是一样的,都是获得item的地址。1获得的就是item实例。所以会有那个编译错误。1和2具体要看你需要指针还是需要实例。new这种写法和2是一样的,但使用的不多

0
4
ccmouse
回复
拧壶冲
返回指针是因为你定义了func (u *User) Look() 所以实现Person接口的是*User,而不是User。 这样写没问题。Go语言的代码一般都是这样,不奇怪。
2020-11-17
共4条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程