php中文网

Golang 可变参数列表与数组或切片有何不同?

php中文网

可变参数列表、数组和切片在 go 中处理多值,但有细微差别:可变参数列表接受数量可变的参数,并解析成切片;数组具有固定长度,传递时传递引用;切片具有动态长度,可调整大小,传递时传递引用。

Go 可变参数列表与数组或切片:细微差别

可变参数列表、数组和切片都是 Go 语言中处理多值的强大工具。然而,它们之间存在着细微的差别,理解这些差别对于正确使用它们至关重要。

可变参数列表

立即学习“go语言免费学习笔记(深入)”;

可变参数列表是一个函数签名中用于接收数量可变参数的特殊语法。它使用 ... 符号,后跟参数类型,例如:

func Sum(numbers ...int) int {
  sum := 0
  for _, num := range numbers {
    sum += num
  }
  return sum
}

在这里,Sum 函数可以接受任意数量的 int 型参数。

数组

数组是一个固定长度的数据结构,用于存储相同类型的值。它使用以下语法声明:

var numbers [5]int

此数组可以存储 5 个 int 型值。数组的长度在编译时固定,并且不能动态更改。

切片

切片是一种动态数据结构,它代表数组的一部分。它的语法如下所示:

var numbers []int

切片没有固定的长度,它可以根据需要动态增长或缩减。

差别

  • 参数传递:可变参数列表直接作为函数参数传递,就像普通参数一样。而数组和切片传递的是它们的引用。
  • 长度:数组具有固定长度,而切片具有动态长度。可变参数列表没有固定的长度,但它在函数调用时解析成切片。
  • 修改:数组的内容不能调整大小,而切片可以调整大小。可变参数列表解析后的切片可以修改,就像普通切片一样。

实战案例:

使用可变参数列表计算平均值:

func Average(numbers ...float64) float64 {
  if len(numbers) == 0 {
    return 0
  }
  sum := 0.0
  for _, num := range numbers {
    sum += num
  }
  return sum / float64(len(numbers))
}

使用数组存储学生成绩:

var grades [10]float64

// ...

grades[0] = 90
grades[1] = 85
// ...

使用切片存储购物清单:

var items []string

// ...

items = append(items, "Milk")
items = append(items, "Eggs")
// ...

以上就是Golang 可变参数列表与数组或切片有何不同?的详细内容,更多请关注php中文网其它相关文章!