我是GoLang的新手,来自Delphi,C++世界 - 对这种语言非常兴奋,我认为注定要成为"下一个大事".
我试图解决Go解析器和编译器如何处理指针和引用 - 似乎找不到任何明确规则布局的地方.
例如,在下面的代码示例中,返回类型*list.List和局部变量l是指针类型,并且*在其声明中需要指针符号,但在使用时不必取消引用它们:l.PushBack(i).但在同一代码中,输入参数value *int64被声明为指针,必须取消引用才能正确使用:var i int64 = *value / 2
我假设这是因为list.List是一个引用类型,因此解除引用在使用时是隐式的,int64而是一个值类型,必须像处理值类型的任何指针一样处理,例如在C++中:必须取消引用它.
让我感到困惑的是,即使*list.List必须*使用列表实例声明为指针类型,也不需要解除引用.这让我最初很困惑.那是"就是它的样子",还是我错过了什么?
样品:
func GetFactors(value *int64) *list.List {
l := list.New()
l.PushBack(*value)
var i int64 = *value / 2
for ; i > 1; i-- {
if *value%i == 0 {
l.PushBack(i)
}
}
return l
}
Run Code Online (Sandbox Code Playgroud)