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 2023-07-04 16:26  zhangmingda  阅读(17)  评论(0编辑  收藏  举报

导航