3 回答
TA贡献1804条经验 获得超7个赞
[2]float64
是一个数组。当你声明一个函数f([2]float64)
时,你只能传递一个[2]float64
类型值给它,当你这样做时,它会传递整个数组的副本。数组是固定大小的结构。
[]float64
是一片。它本质上是一个包含指向数组的指针、长度和容量的结构。切片包含指向数组的指针,因此如果您有一个函数f([]float64)
,您可以将任何大小的数组传递给它,并且将传递对底层数组的引用,而不是该数组的副本。
要将数组转换为切片,您可以使用arr[:]
. 在您的程序中:
fmt.Println("Sum: ", addThemNumbers(favNums[:]))
TA贡献1744条经验 获得超4个赞
数组和切片之间有区别。我想你要找的是一片。
在函数参数中,您期望的是一个切片,而是传递了一个数组。
有两种方法可以快速处理它:
要删除类型不匹配,请在参数中提及大小,以便它现在接受一个数组(而不是切片)。
将数组转换为切片
fmt.Println("Sum: ", addThemNumbers(favNums[:]))
TA贡献1802条经验 获得超5个赞
实际上,当我们查看 []float64 和 [2]float64 时,它们看起来是一样的。但是有一个区别,即 []float64 是一个切片,而 [2]float64 是一个数组。
因此,当您更改 addThemNumbers(numbers [2]float64) 时,它会自动变成一个数组。因此,您可以无错误地运行该程序。
如果您想将数组转换为切片,您可以尝试下面的代码。
func addThemNumbers(numbers []float64) float64{
sum := 0.0
for _,value := range numbers {
sum += value
}
return sum
}
func main() {
favNums := [2]float64 {0.9, 1.997}
fmt.Println("Sum: ", addThemNumbers(favNums[:]))
}
- 3 回答
- 0 关注
- 103 浏览
添加回答
举报