go 传参 类型:接口类型 返回统配接口类型 , 求两个切片并集

 

用一个函数 可以同时求 两个 []string  切片,或者两个[]int 切片并集

复制代码
package main

// 测试统配传参
func commonParamTest(s1, s2 interface{}) interface{} {
    switch v := s1.(type) { //获取对应的类型
    case []string:
        m := make(map[string]int)
        for _, s1v := range v {
            m[s1v]++
        }
        // 将接口切片转换为字符串切片
        var s []string
        for _, val := range s2.([]string) {
            s = append(s, val)
        }
        for _, s2v := range s {
            times, _ := m[s2v]
            if times == 0 {
                v = append(v, s2v)
            }
        }
        return v
    case []int:
        m := make(map[int]int)
        for _, s1v := range v {
            m[s1v]++
        }
        // 将接口切片转换为int切片
        var i []int
        for _, val := range s2.([]int) {
            i = append(i, val)
        }
        for _, s2v := range i {
            times, _ := m[s2v]
            if times == 0 {
                v = append(v, s2v)
            }
        }
        return v
    }
    return nil
}

// 可变长参数 ...类型 放在最后
func sumN(x, y int, z ...int) int {
    s := x + y
    fmt.Println(x, y)
    for _, v := range z {
        fmt.Printf("%d\t", v)
        s += v
    }
    return s
}

func main() {
  // 测试统配附接口传参结果
    fmt.Println("=========测试统配附接口传参[]int结果==========")
    i1 := []int{1, 2, 3}
    i2 := []int{4, 5, 6}
    ci := commonParamTest(i1, i2)
    for _, v := range ci.([]int) {
        fmt.Println(v)
    }
    fmt.Println("=========测试统配附接口传参[]string结果==========")
    s1 := []string{"", "", "san"}
    s2 := []string{"4", "5", "liu"}
    sc := commonParamTest(s1, s2)

    fmt.Println("sc.([]string)", sc.([]string))

    for _, v := range sc.([]string) {
        fmt.Println(v)
    }

}
复制代码

使用的时候要对空接口类型进行反向解析:

sc.(Type)  sc代表反馈空接口类型复制的变量

输出结果

复制代码
=========测试统配附接口传参[]int结果==========   
1                                                
2                                                
3                                                
4                                                
5                                                
6                                                
=========测试统配附接口传参[]string结果==========
sc.([]string) [一 二 san 4 5 liu]                
一                                               
二                                               
san                                              
4                                                
5                                                
liu         
复制代码

 

posted on   zhangmingda  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-07-04 网络编程socket 结合IO多路复用select; epool机制分别实现单线程并发TCP服务器
2020-07-04 tcp十种状态;关于tcp中time_wait状态(2MSL问题)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示