程序员开源工具技巧架构算法设计模式和编程理论

关于可变参数的理解和练习

2017-01-20  本文已影响24人  大雁儿

《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.可变长参数需要考虑为空的情况,这个容易引起运行恐慌,我也是在运行出现很多次运行恐慌后才领悟的

上一篇下一篇

猜你喜欢

热点阅读