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)
}
相关文章
|
26天前
|
测试技术 Go API
Go 切片导致 rand.Shuffle 产生重复数据的原因与解决方案
在 Go 语言开发中,使用切片时由于其底层数据共享特性,可能会引发意想不到的 Bug。本文分析了 `rand.Shuffle` 后切片数据重复的问题,指出原因在于切片是引用类型,直接赋值会导致底层数组共享,进而影响原始数据。解决方案是使用 `append` 进行数据拷贝,确保独立副本,避免 `rand.Shuffle` 影响原始数据。总结强调了切片作为引用类型的特性及正确处理方法,确保代码稳定性和正确性。
115 82
|
20天前
|
存储 算法 Go
Go语言实战:错误处理和panic_recover之自定义错误类型
本文深入探讨了Go语言中的错误处理和panic/recover机制,涵盖错误处理的基本概念、自定义错误类型的定义、panic和recover的工作原理及应用场景。通过具体代码示例介绍了如何定义自定义错误类型、检查和处理错误值,并使用panic和recover处理运行时错误。文章还讨论了错误处理在实际开发中的应用,如网络编程、文件操作和并发编程,并推荐了一些学习资源。最后展望了未来Go语言在错误处理方面的优化方向。
|
4月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
88 4
|
4月前
|
Go
go语言常量的类型
【10月更文挑战第20天】
40 2
|
4月前
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
38 3
|
6月前
|
Go
go函数
go函数
43 10
|
6月前
|
编译器 Go C++
Go to Learn Go之函数
Go to Learn Go之函数
46 0
|
6月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
6月前
|
编译器 Go 索引
Go数组、多维数组和切片(动态数组),及常用函数len(),cap(),copy(),append()在切片中的使用
本文介绍了Go语言中数组、多维数组和切片(动态数组)的基本概念和操作,包括数组的定义、初始化、访问,多维数组的定义和访问,以及切片的创建、使用和扩容。同时,还讲解了切片中常用的函数len()、cap()、copy()和append()的使用方法。
|
7月前
|
设计模式 Java 数据库连接