首页 > 其他分享 >go 传参 类型:接口类型 返回统配接口类型 , 求两个切片并集

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

时间:2023-07-04 16:35:53浏览次数:39  
标签:传参 string int fmt range 接口类型 统配

 

用一个函数 可以同时求 两个 []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         

 

标签:传参,string,int,fmt,range,接口类型,统配
From: https://www.cnblogs.com/zhangmingda/p/17526091.html

相关文章

  • HDMI笔记2-HDMI接口类型
    HDMI的规格书中规定四种HDMI接口,分别是:HDMIAType应用于HDMI1.0版本,总共有19pin,规格为4.45mm×13.9mm,为最常见的HDMI接头规格,相点对点于DVISingle-Link传输。在HDMI1.2a之前,最大能传输165MHz的TMDS,所以最大传输规格只能在于1600×1200(TMDS162.0MHz)。PinPin定义......
  • 【Vue3】Vue3中常用的组件传参方式
    props/$emit父传子(自定义属性props)//父组件代码<Son:name="test"/>//子组件代码<div>{{name}}</div>props:{name:{type:String,default:"default",},}子传父(自定义this.$emit)//子组件代码<button@click=&qu......
  • 二维数组的传参方式
    1.传数组整体格式:(1)给函数传参时,用数组名arr;(2)函数定义时,用intarr[3][5]接收;(3)在函数中打印元素时,用arr[1][1]。voidtest(intarr[3][5]){ printf("%d",arr[1][1]);}intmain(){ intarr[3][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}}; test(arr); return0;}2.传首元......
  • 靳宇灵 | 金蝶云星空 工序计划 表单ID是:SFC_OperationPlanning的WEBAPI接口 指定工序
    金蝶云星空工序计划表单ID是:SFC_OperationPlanning的WEBAPI接口指定工序开工的接口传参json传怎么写?以下是基于金蝶云星空工序计划系统中SFC_OperationPlanning的WEBAPI接口的指定工序开工的接口传参json示例:Copy{"FormId":"SFC_OperationPlanning","FieldKeys":"Pr......
  • 考虑分布式光伏储能系统的优化配置方法 完全复现截图文献模型 采用双层模型求解 上层
    考虑分布式光伏储能系统的优化配置方法完全复现截图文献模型采用双层模型求解上层决策储能系统配置容量用遗传粒子群算法求解下层决策最优运行策略采用cplex求解器求解算例为ieee33节点配电系统代码运行时间为90分钟左右此代码可改写性强这段程序是一个基于粒子群优化算......
  • uni-app微信小程序路由传参数据截断问题解决
    跳转页面:因为数据接受页面是富文本编辑器接收,所以先是将数据双引号处理了。数据太多太长,跳转页面只要用encodeURIComponent()函数将其数据处理后传过去constdetails=this.oneform.text.replace(/"/g,'\'')this.$tab.navigateTo(`/pages/common/editor/editor?details=${e......
  • main函数传参
    在有些C语言程序中,我们会看到main函数有如下的写法:intmain(intargc,char*argv[]);或者是这样的:intmain(intargc,char**argv);给main传参通过argc和argv这两个参数来实现。执行程序时,可以从命令行传值给C程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想......
  • 谈一谈PHP中关于非法参数名传参问题
    在CTF中有些时候GET、POST等方法传参中参数名可能存在一些非法字符导致传参问题。下面讲述的也算是CTF比赛中常见的一种Trick注意:这种Trick只能在PHP版本小于8时有效,当PHP版本大于等于8并不会出现这种转换错误在PHP官方文档中有解释当变量名中出现点和空格时,PHP的处理方式https://w......
  • ajax之post请求application/x-www-form-urlencoded传参的解决方案
    ​ 在使用ajax进行参数获取时,始终获取不到参数,但是调用postman可以正常接收参数,所以初步推测是参数格式不正确,那么正确的格式应该怎么写呢?一般按照正常的逻辑,我们在传递application/x-www-form-urlencoded时,参数应该这样写,但实际操作中发现一直获取不到参数。ajax.create(......
  • C# Type传参转换成泛型T
    publicclassTest{publicvoidExport<T1,T2>(){}publicvoidExportByClassName(stringtypename1,stringtypename2){Typet1=Type.GetType(typename1);Typet2=Type.GetType(typename2);Method......