pointers - golang return []*TreeNode{} 和 return []*TreeNode{nil} 有什么区别
问题描述
我是golang的新手,对以下内容感到困惑,
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func test() []*TreeNode {
return []*TreeNode{}
}
func test1() []*TreeNode {
return []*TreeNode{nil}
}
我正在尝试在 TreeNode 上编写一个递归函数,但是,如果我使用该test
样式来表示叶节点,我将从调用者函数中获得一个空的 TreeNode 切片。
如果我使用test1
来表示叶节点,那么行为就是我想要的。
我觉得对于test1
,它给了我一个指向空 TreeNode 的点,但是,test
代码给了我一个点nil
......我不确定我是否做对了。您能否指出我要挖掘的正确术语或概念,它会很棒。
另外,如果您可以让我更多地了解下划线逻辑,那就太好了。
提前致谢。
解决方案
这将返回一个空切片:
return []*TreeNode{}
这将返回一个包含一个元素的切片,该元素是一个 nil 指针:
return []*TreeNode{nil}
这些都没有给你一个TreeNode
虽然。第二个给你一个 TreeNode 指针,它是 nil。您如何解释这些取决于代码的其余部分,但我怀疑两者是否真的是您想要的,因为没有人可以拥有该val
字段。
推荐阅读
- javascript - 如何在 ${variable} 的每个实例上拆分 ``(反引号字符串)
- python - 使用 Python 和 Beautifulsoup 登录 LinkedIn
- java - 乘以浮点数后的错误结果
- python - 我可以将数组元素从 mongodb 拉到 javascript 吗?
- ruby-on-rails - has_many 通过多态,两边都有别名
- haskell - 没有参数的haskell函数中的where子句
- javascript - Ajax-XHR 加载失败,内部服务器错误 500
- java - 没有 ID 的 Java/Hibernate 查看实体
- umbraco - 是否可以在没有转发器的情况下集成 Log4net 和 Splunk?
- performance - 优化 DAX 在时间范围内有 X 数量或更多