当前位置:   article > 正文

golang中传递变长参数(...type)

golang中传递变长参数(...type)

原来有很长的一段时间不理解golang函数实参和形参中的 ... 到底是什么意思,有好几次的失败使用案例,具体也忘了当时为啥失败了

首先是形参中的(...type)换种说法这个地方就是一个type类型的切片

比如说func min(s ...int)

对于实参中的(type...)网上常见的一种叫法是切片展开

按照字面意思的理解的话,min(slice...)差不多等价于min(7,9,3,5,1),测试结果却是也是一样的。

资料中描述形参和实参用的差不多都是切片,所以如果形参直接写成切片的形式

  1. package main
  2. import "fmt"
  3. func main() {
  4. var x int
  5. //x = min(4, 5, 6, 7)
  6. //fmt.Printf("The minimum is: %d\n", x)
  7. slice := []int{7, 9, 3, 5, 1}
  8. x = min(slice)
  9. fmt.Printf("The minimum in the slice is: %d", x)
  10. }
  11. func min(s []int) int {
  12. if len(s) == 0 {
  13. return 0
  14. }
  15. min := s[0]
  16. for _, v := range s {
  17. if v < min {
  18. min = v
  19. }
  20. }
  21. return min
  22. }

结果也是一样的,对于展开的写法,也可以直接定义为一个切片

结果也都是不受影响的,完全也可以理解为一个函数传递切片的简写方法,运行效率和底层差异目前还不清楚,也有可能编译器的优化使得这两种方法运行逻辑都是一样的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/615033
推荐阅读
相关标签
  

闽ICP备14008679号