go 将函数 当做参数传递 实现 不同类型数据求和

package main

import (
    "fmt"
    // "honnef.co/go/tools/arg"
    // "reflect"
)

//https://vim.wxnacy.com/

type doint func(arg []int) int

// 数字求差

func subnumber(arg []int) int {
    
    
    sum1 := 0
    for _, n := range arg {
    
    
        sum1 -= n
    }
    return sum1
}

// 数字求和

func addnumber(arg []int) int {
    
    
    sum1 := 0
    for _, n := range arg {
    
    
        sum1 += n
    }
    return sum1
}

// 数字处理, 将函数当做变量传送

func dealint(arg []int, func1 doint) int {
    
    
    sum1 := func1(arg)
    return sum1
}

// 字符串求和

func addstr(arg []string) string {
    
    
    sum1 := ""
    for _, n := range arg {
    
    
        sum1 = sum1 + n
    }
    return sum1
}

// 64 位浮点数求和

func addfloat64(arg []float64) float64 {
    
    
    sum1 := 0.0
    for _, n := range arg {
    
    
        sum1 = sum1 + n
    }
    return sum1
}

// 泛型求和, 支持浮点数, 字符串,加法

func addvar(var1 interface{
    
    }) interface{
    
    } {
    
    
    // type1 := reflect.TypeOf(var1)
    var varsum interface{
    
    }
    switch var1.(type) {
    
    
    case []string:
        varsum = addstr(var1.([]string))
    case []int:
        varsum = addnumber(var1.([]int))
    case []float64:
        varsum = addfloat64(var1.([]float64))
    }

    return varsum
}

func main() {
    
    

    // addvar 侧重于   功能相同,但是数据类型不同
    strlist1 := []string{
    
    "1", "1", "2"}
    fmt.Println(addvar(strlist1))

    intlist1 := []int{
    
    3, 4, 5, 6}
    fmt.Println(addvar(intlist1))

    float64list1 := []float64{
    
    1.1, 2.3, 4.4, 5}
    fmt.Println(addvar(float64list1))

    // dealint 侧重于  函数具有相同的类型,但是功能不同
    addsum1 := dealint(intlist1, addnumber)
    subsum1 := dealint(intlist1, subnumber)

    fmt.Println(addsum1)
    fmt.Println(subsum1)

}

猜你喜欢

转载自blog.csdn.net/qq_43373608/article/details/107217493