Golang Go语言中在方法的返回值中声明变量名和在方法中声明有什么不同?
Golang Go语言中在方法的返回值中声明变量名和在方法中声明有什么不同?
今天刷 LeetCode 遇到一个很有意思的 trick:
func reversePrintDefer(head *ListNode) (res []int) {
//res := make([]int, 0)
for head != nil {
tmp := head
defer func() {
res = append(res, tmp.Val)
fmt.Println(res)
}()
head = head.Next
}
return res
}
如果打开方法中的res
,去掉方法的返回值命名,这时候返回的永远是个空切片
无论哪种方式,在 defer 中的打印都能打印出正确值
有没有大佬知道是什么原因造成的
更多关于Golang Go语言中在方法的返回值中声明变量名和在方法中声明有什么不同?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
更多关于Golang Go语言中在方法的返回值中声明变量名和在方法中声明有什么不同?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
多谢
在Golang(Go语言)中,方法的返回值中声明变量名和在方法体内部声明变量名,虽然都涉及变量的使用,但它们在语法、可读性和用途上存在显著差异。
-
方法返回值中声明变量名:
- 当你在方法的签名中直接为返回值命名时,这些变量在方法体内部是可见的,并且可以直接赋值。
- 这种做法提高了代码的可读性,因为它清晰地表明了哪些变量是方法的输出。
- 例如:
func MyFunc() (result int) { result = 42; return }
。这里,result
在方法体内被赋值并返回。
-
方法体内部声明变量名:
- 在方法体内部声明的变量是局部的,它们的作用域仅限于方法体内部。
- 这些变量通常用于存储中间结果或控制流程,并不直接作为方法的返回值。
- 如果需要将这些局部变量作为返回值,你需要在返回语句中显式地指定它们。
- 例如:
func MyFunc() int { var temp int = 42; return temp }
。这里,temp
是局部变量,其值被返回。
总结来说,方法返回值中声明变量名是一种更直接、更清晰的表达方法输出的方式,而方法体内部声明的变量则更多地用于实现方法的内部逻辑。两者各有用途,选择哪种方式取决于具体的编程需求和代码风格。