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)
}
相关文章
|
2月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
59 4
|
2月前
|
Go
go语言常量的类型
【10月更文挑战第20天】
31 2
|
2月前
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
23 3
|
4月前
|
Go
go函数
go函数
39 10
|
4月前
|
编译器 Go C++
Go to Learn Go之函数
Go to Learn Go之函数
38 0
|
4月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
4月前
|
编译器 Go 索引
Go数组、多维数组和切片(动态数组),及常用函数len(),cap(),copy(),append()在切片中的使用
本文介绍了Go语言中数组、多维数组和切片(动态数组)的基本概念和操作,包括数组的定义、初始化、访问,多维数组的定义和访问,以及切片的创建、使用和扩容。同时,还讲解了切片中常用的函数len()、cap()、copy()和append()的使用方法。
|
5月前
|
设计模式 Java 数据库连接
|
5月前
|
安全 Go
|
5月前
|
存储 安全 程序员