我是一个围棋新手,但我读过围棋常客不会错过的书.每次我try 学习一门新语言时,我都会用the L99 list of problems来进行一些练习.

即使我试图编写一些像第一个问题这样微不足道的东西(在GO中,它将是单个语句,获取片的最后一个元素),我如何将其编写为一个函数,该函数接受任何类型的片并(使用上面引用的单个语句)返回该片的最后一个元素?

我想,即使语言没有参数多态性,为了让围棋常客声称他们不错过参数多态性,必须有一些惯用的"GO"方式来做到这一点.否则,如果示例比列表的最后一个元素更复杂,那么您将需要一个函数来为每种类型执行任务.

我遗漏了什么?

推荐答案

您引用了"99 lisp问题",但lisp根本没有参数多态性或静态类型.

许多静态类型语言,如Objective-C和泛型之前的Java,没有参数多态性.解决方案是只使用可以接受所有值的类型(在Go中为interface{}),并在需要从中获取某些特定类型时进行强制转换.

对于您的特定问题,如何获取"任何类型的片";不幸的是,没有专门包含片的接口,因为片没有任何方法;因此您只能使用interface{}.因为您有一个未知的片类型,所以需要使用反射(reflect包)来执行所有的片操作,包括获取长度和容量、追加和访问特定索引处的元素.

另一种 Select 是,不使用"任何类型的切片",只需在所有代码中使用"interface{}的切片",即[]interface{},然后您可以在其上使用普通的切片运算符,并且您可以放入任何元素,但在取出它们时进行强制转换.

Go相关问答推荐

向路由发送获取请求时Golang中出现404错误

Go Fiber和HTMX—HX—Trigger header被更改为HX—Trigger,这不是HTMX监听的内容

Golang html/模板&需要错误数量的参数1在模板中使用';调用';获得0&q;

更改位置级别和时间戳零点Golang

如何将GoFr筛选器用于查询参数?

如何使用工作区方法扩展克隆的Golang库

如何防止程序B存档/删除围棋中程序A当前打开的文件?

为什么没有正确生成这些元组?

使用Golang的Lambda自定义al2运行时,初始化阶段超时

如何用';贪婪原则';正确地

确定果朗CSV行中的字节数

我可以扫描表中每个项目的最高范围键值吗?

在 go 中,将接收器 struct 从值更改为指针是否向后兼容?

在 Golang 中查看目录是否可写的跨平台方式?

缺少签名帮助文档

将 struct 转换为 CSV 字符串

在反向 GORM 中创建查询有一个关系

Golang:隐式 struct 匹配

Go 使用 struct 作为接口而不实现所有方法

Go:如何创建一个可以提供配置文件中描述的 url 的服务器