赞
踩
原来有很长的一段时间不理解golang函数实参和形参中的 ... 到底是什么意思,有好几次的失败使用案例,具体也忘了当时为啥失败了
首先是形参中的(...type)换种说法这个地方就是一个type类型的切片
比如说func min(s ...int)
对于实参中的(type...)网上常见的一种叫法是切片展开
按照字面意思的理解的话,min(slice...)差不多等价于min(7,9,3,5,1),测试结果却是也是一样的。
资料中描述形参和实参用的差不多都是切片,所以如果形参直接写成切片的形式
- package main
-
- import "fmt"
-
- func main() {
- var x int
- //x = min(4, 5, 6, 7)
- //fmt.Printf("The minimum is: %d\n", x)
- slice := []int{7, 9, 3, 5, 1}
- x = min(slice)
- fmt.Printf("The minimum in the slice is: %d", x)
- }
-
- func min(s []int) int {
- if len(s) == 0 {
- return 0
- }
- min := s[0]
- for _, v := range s {
- if v < min {
- min = v
- }
- }
- return min
- }

结果也是一样的,对于展开的写法,也可以直接定义为一个切片
结果也都是不受影响的,完全也可以理解为一个函数传递切片的简写方法,运行效率和底层差异目前还不清楚,也有可能编译器的优化使得这两种方法运行逻辑都是一样的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。