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
分类:
GO
posted on 2023-07-04 16:26 zhangmingda 阅读(24) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源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问题)