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

简介: 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 subnumber(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)
}
相关文章
|
10天前
|
Go
go函数
go函数
30 10
|
6天前
|
编译器 Go C++
Go to Learn Go之函数
Go to Learn Go之函数
10 0
|
8天前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
8天前
|
编译器 Go 索引
Go数组、多维数组和切片(动态数组),及常用函数len(),cap(),copy(),append()在切片中的使用
本文介绍了Go语言中数组、多维数组和切片(动态数组)的基本概念和操作,包括数组的定义、初始化、访问,多维数组的定义和访问,以及切片的创建、使用和扩容。同时,还讲解了切片中常用的函数len()、cap()、copy()和append()的使用方法。
|
2月前
|
设计模式 Java 数据库连接
|
2月前
|
安全 Go
|
2月前
|
存储 安全 程序员
|
2月前
|
Go 开发者
|
2月前
|
编译器 Go 开发者
Go 在编译时评估隐式类型的优点详解
【8月更文挑战第31天】
24 0
|
2月前
|
存储 编译器 Go
下一篇
无影云桌面