《Go并发编程实践》在介绍数据类型时提过可变长参,理论说明如下图所示
Paste_Image.png书上太过理论了,不助于理解,因为我就一直理解不了,所以翻阅了其他的资料,帮助自己消化这个内容。
也有幸找到了非常好的教程:http://www.shinley.com/ch5/ch5-07.html 大家可以点击这个查看详细内容,这个GO语言圣经的教程非常适合入门者学习和练习。
我自己在看完后尝试做了练习5.15,通过不断地试错和优化整理出了以下关于可变参数取最大值、最小值的初级代码
package main
import (
"fmt"
)
//网页实例
func sum(vals...int)int {
total := 1
for _, val := range vals {
total += val
}
return total
}
//根据可变长参特点优化代码
func max(vals ...int) {
length:=len(vals)
fmt.Println("The length:",length)
if length!=0{
res:=vals[0]
for _,val:=range vals{
if res<=val{
res=val
}
}
fmt.Println("The max:",res)
}else {
fmt.Println("The vals is nil")
}
}
func min(vals ...int) {
length:=len(vals)
fmt.Println("The length:",length)
if length!=0{
res:=vals[0]
for _,val:=range vals{
if res>=val{
res=val
}
}
fmt.Println("The min:",res)
}else {
fmt.Println("The vals is nil")
}
}
func main() {
fmt.Println("The total:",sum(8,9,10,11))
max(100,2,3,16,19)
min(-1,8,20,-100,-200)
max(25,9,18)
max()
min(35,1,58,2,19,58,1)
min()
}
运行结果:
The total: 39
The length: 5
The max: 100
The length: 5
The min: -200
The length: 10
The max: 58
The length: 0
The vals is nil
The length: 7
The min: 1
The length: 0
The vals is nil
上面是我的初次尝试,逻辑过程非常中规中矩,所以代码看上去非常繁琐。
思路:
1.比较大小就从第一个开始,一个一个比,所有的数据都比较完成后输出结果
2.可变长参数存储时会自动生成slice,所以有一个自带的循环,利用这点实现比较
3.可变长参数需要考虑为空的情况,这个容易引起运行恐慌,我也是在运行出现很多次运行恐慌后才领悟的
网友评论