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 阅读(21) 评论(0) 编辑 收藏 举报