Golang可变参数(Variadic Parameters)使用示例 - https://play.golang.org/p/l6pbuFDz_eP
Golang可变参数(Variadic Parameters)使用示例 - https://play.golang.org/p/l6pbuFDz_eP https://play.golang.org/p/l6pbuFDz_eP
我不太确定该如何提问,但我会尝试一下。
上述代码输出: [2 3 4 5 6 7 8 9] []int 索引位置0处的元素,现在将2加到总和,当前总和为2 索引位置1处的元素,现在将3加到总和,当前总和为5 索引位置2处的元素,现在将4加到总和,当前总和为9 索引位置3处的元素,现在将5加到总和,当前总和为14 索引位置4处的元素,现在将6加到总和,当前总和为20 索引位置5处的元素,现在将7加到总和,当前总和为27 索引位置6处的元素,现在将8加到总和,当前总和为35 索引位置7处的元素,现在将9加到总和,当前总和为44 总和为44 总和为44
我的第一个问题是:fmt.Println("The total is", x) 执行的是哪部分代码?
另外,fmt.Println("The total is", sum) 和 return sum 执行的是哪部分代码?
更多关于Golang可变参数(Variadic Parameters)使用示例 - https://play.golang.org/p/l6pbuFDz_eP的实战教程也可以访问 https://www.itying.com/category-94-b0.html
因为第一个是参数的类型,第二个是返回值的类型。
更多关于Golang可变参数(Variadic Parameters)使用示例 - https://play.golang.org/p/l6pbuFDz_eP的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
"调用者"指的是谁或什么
现在我开始明白了,因为之前我没有注意到这部分
sum += v
更多:上述结果中哪部分来自
fmt.Println("The total is", sum)
return sum
在此上下文中,它指的是代码中调用该函数的位置。
func sum(x …int) int {
为什么需要写两次"int"?
为什么 x := sum(2, 3, 4, 5, 6, 7, 8, 9) 会创建一个字符串切片?
更多内容:上述结果中哪部分来自
fmt.Println("The total is", sum)
return sum
这部分不用在意。我已经明白了。
以下是同一主题的更多代码: https://play.golang.org/p/OwhQgVOTg7J
我有几个问题。
- 代码的哪一部分产生了:"[]int"
- 这部分代码是否必要?如果必要,为什么?“return sum”
fmt.Printf("%T\n", x)此处打印变量 x 的类型- 返回总和意味着希望调用方接收函数调用的结果
func main() {
fmt.Println("hello world")
}
这确实很有帮助,而且你理解得很对。我觉得我需要反复研读这个内容。这是个非常有趣的表述。
否则,传递的值是一个类型为 []T 的新切片,其底层是一个新的数组,该数组的连续元素是实际的参数,这些参数都必须能够赋值给 T。
以下是更多代码:
https://play.golang.org/p/doo199ZzYtT
我不理解
xi := []int{2, 3, 4, 5, 6, 7, 8, 9}
这段代码的作用。它似乎与之前代码中的
x := sum(2, 3, 4, 5, 6, 7, 8, 9)
没有产生不同的结果。
xi := []int{2, 3, 4, 5, 6, 7, 8, 9}
这声明并初始化了一个int类型的切片,然后将其赋值给变量xi。
这等同于
var xi []int
xi = []int{2, 3, 4, 5, 6, 7, 8, 9}
第一行可以理解为:“变量xi是一个int类型的切片”(将[]读作"切片")。第二行只是切片的初始化方式。
在你的代码第9行,你将切片传递给函数的方式是:
x := sum(xi...)
因为sum()是一个可变参数函数,切片被传递给sum()的方式与以下代码相同:
sum(2, 3, 4, 5, 6, 7, 8, 9)
在每种情况下,底层机制都是sum()接收一个切片。只是在代码中看起来不同。
不知道这是否有帮助,但这在规范中有说明:
https://golang.org/ref/spec#Passing_arguments_to_…_parameters
在您提供的代码中,fmt.Println("The total is", x) 是在 main 函数中执行的,其中 x 是调用 sum 函数后返回的结果。具体来说,x := sum(2, 3, 4, 5, 6, 7, 8, 9) 这一行调用了 sum 函数,该函数计算并返回可变参数的总和,然后 x 存储这个返回值,并通过 fmt.Println 打印出来。
fmt.Println("The total is", sum) 和 return sum 是在 sum 函数内部执行的。sum 函数接收一个可变参数 nums(类型为 ...int),遍历每个元素并累加到局部变量 sum 中。在循环结束后,fmt.Println("The total is", sum) 打印出函数内部计算的总和,然后 return sum 将这个总和返回给调用者(即 main 函数)。
以下是代码的简要解释和示例,基于您提供的输出:
package main
import "fmt"
// sum 函数接收可变参数 nums,计算总和并返回
func sum(nums ...int) int {
total := 0
for i, num := range nums {
total += num
fmt.Printf("索引位置%d处的元素,现在将%d加到总和,当前总和为%d\n", i, num, total)
}
fmt.Println("总和为", total) // 这是在 sum 函数内部打印的
return total
}
func main() {
x := sum(2, 3, 4, 5, 6, 7, 8, 9) // 调用 sum 函数,x 接收返回值
fmt.Println("总和为", x) // 这是在 main 函数中打印的,使用 x
}
输出与您描述的一致:
索引位置0处的元素,现在将2加到总和,当前总和为2
索引位置1处的元素,现在将3加到总和,当前总和为5
索引位置2处的元素,现在将4加到总和,当前总和为9
索引位置3处的元素,现在将5加到总和,当前总和为14
索引位置4处的元素,现在将6加到总和,当前总和为20
索引位置5处的元素,现在将7加到总和,当前总和为27
索引位置6处的元素,现在将8加到总和,当前总和为35
索引位置7处的元素,现在将9加到总和,当前总和为44
总和为44
总和为44
第一个 “总和为44” 来自 sum 函数内部的 fmt.Println,第二个来自 main 函数中的 fmt.Println("总和为", x)。这解释了为什么总和被打印了两次。

