当前位置: 首页 > 面试题库 >

表示功能,可任意分割

公西修文
2023-03-14
问题内容

我想表达一个可以分割的函数。我以为我可以这样做:

func myFunc(list []interface{}) {
  for _, i := range list {
    ...
    some_other_fun(i)
    ...
  }
}

其中some_other_fun(..)本身需要的interface{}类型。但是,这不起作用,因为您不能通过[]DEFINITE_TYPEas
[]interface{}。请参阅:https
:
//golang.org/doc/faq#convert_slice_of_interface,它指出[]
interface {}的表示形式是不同的。

上面golang.org链接中提供的建议建议从该DEFINITE_TYPE切片中重建一个新的接口切片。但是,在我想调用该函数的代码中到处都不能做到这一点(此函数本身仅缩写9行代码,但是这9行在我们的代码中经常出现)。

在每种情况下,我想调用该函数时,我都会传递一个[]*DEFINITE_TYPE起初认为会更容易抽象的函数,直到再次发现。

此外,每次我要调用该函数时,它都是不同的,DEFINITE_TYPE因此为n个类型实现n个示例不会节省我任何代码行或使我的代码更清晰(相反!)。

令人沮丧的是我无法执行此操作,因为我们的代码中有9行是惯用的,而且错误键入很容易引入错误。我真的很缺少泛型。真的没有办法吗?!


问题答案:

可能最好的办法是定义一个接口,该接口封装myFunc切片需要执行的操作(即,在您的示例中,获取第n个元素)。然后,函数的参数是该接口类型,然后您为每种要传递给函数的类型定义接口方法。

您也可以使用reflect包来完成此操作,但这可能不是一个好主意,因为如果您传递除slice(或数组或字符串)以外的其他内容,则可能会感到恐慌。

func myFunc(list interface{}) {
    listVal := reflect.ValueOf(list)
    for i := 0; i < listVal.Len(); i++ {
        //...
        some_other_fun(listVal.Index(i).Interface())
        //...
    }
}

参见https://play.golang.org/p/TyzT3lBEjB。



 类似资料:
  • 问题内容: 是否可以为Go中的任意函数创建一个包装程序,该包装程序将使用相同的参数并返回相同的值? 我不是在说看起来完全一样的包装器,看起来可能有所不同,但是应该可以解决问题。 例如,问题可能是创建一个任意函数的包装,该包装首先在缓存中查找函数调用的结果,并且仅在缓存未命中的情况下执行包装的函数。 问题答案: 答案基于@ joshlf13的想法和答案,但对我来说似乎更简单。 http://play

  • ActiveReports 报表功能展示-ASP.NET 通过ActiveReports报表控件,您除了可以创建常用的子报表、交叉报表、分组报表、分栏报表、主从报表等商业报表外,还可以创建具备数据筛选、数据过滤、数据钻取、报表互链等交互能力的数据分析报表,并把数据以可视化的方式呈现出来,快速为应用程序添加强大的报表功能。

  • 本文向大家介绍vue elementui tree 任意级别拖拽功能代码,包括了vue elementui tree 任意级别拖拽功能代码的使用技巧和注意事项,需要的朋友参考一下 我的是根据父级id做的一些判断 补充知识:element-ui tree 实现同级拖拽 我就废话不多说了,大家还是直接看代码吧~ 以上这篇vue elementui tree 任意级别拖拽功能代码就是小编分享给大家的全部

  • 本文向大家介绍Ajax+PHP实现的分类列表框功能示例,包括了Ajax+PHP实现的分类列表框功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Ajax+PHP实现的分类列表框功能。分享给大家供大家参考,具体如下: 一 代码 conn.php: index.php: type.php: index.js: 二 运行结果 更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP+aj

  • 本文向大家介绍thinkphp实现分页显示功能,包括了thinkphp实现分页显示功能的使用技巧和注意事项,需要的朋友参考一下 先上效果图,突然发现和B站上一样 IndexController.class.php代码如下 index.html代码如下 css代码如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍jquery实现的分页显示功能示例,包括了jquery实现的分页显示功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jquery实现的分页显示功能。分享给大家供大家参考,具体如下: 我们在显示文章列表的时候,通常需要分页显示。 一种方式是通过SQL查询的limit进行分页,即只查询该页面的数据。 另外一种方式是查询出所有的数据,传递给前段,然后用jquery控制只显示