- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
为什么 golang 中的列表/环类型为单个项目使用额外的结构 Element/Ring 而不是 interface{} ?我假设有一些好处,但我看不到。
编辑:我的意思是询问 api,而不是关于在实现中使用 Element/Ring。该实现仍然可以使用非导出类型,但让 api 提供和接受接口(interface){},那么为什么要让用户进出 Element/Ring?
Edit2:举个例子,列表 Back() 函数可能是这样的
func (l *List) Back() interface{} {
if l.len == 0 {
return nil
}
return l.root.prev.Value
}
列表仍然在内部使用 Element 但它只是元素(未导出),因为它不会返回它而只返回值。
最佳答案
container/list 是链表,因此拥有可以对整个列表进行操作并跟踪列表的开头和结尾的 List
结构将是有益的。
由于它是一个链接列表,您希望能够将项目链接在一起并从一个项目导航到下一个或上一个项目。这需要一个结构来保存指向下一个和上一个项目的指针,并允许您导航到这些项目(使用 Next() 和 Prev() 函数)。 Element
结构用于此目的,它包含指向下一个/上一个项目的指针以及实际值。
这是结构体的定义方式,它们还有各种成员函数
type List struct {
root Element // sentinel list element, only &root, root.prev, and root.next are used
len int // current list length excluding (this) sentinel element
}
type Element struct {
// Next and previous pointers in the doubly-linked list of elements.
// To simplify the implementation, internally a list l is implemented
// as a ring, such that &l.root is both the next element of the last
// list element (l.Back()) and the previous element of the first list
// element (l.Front()).
next, prev *Element
// The list to which this element belongs.
list *List
// The value stored with this element.
Value interface{}
}
容器/环没有你暗示的“额外”结构。只有 Ring 结构将一个项目链接到下一个/上一个项目并保存值。 Ring 没有开始/结束,因此不需要有一个在整个环上运行或跟踪开始的结构。
type Ring struct {
next, prev *Ring
Value interface{} // for use by client; untouched by this library
}
关于list - 为什么 golang list/ring 的 Element 和 Ring 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24272789/
我想知道 dpdk 是如何绕过内核的。用户空间应用程序如何访问 NIC 空间。 dpdk访问网卡用什么工具?我知道,dpdk 使用 uio_pci_generic 或 igb_uio 或 vfio-p
我一直在学习有关 Windows 驱动程序开发的基础知识,我一直在寻找术语 Ring 0 和 Ring 3。这些是指什么?它们与内核模式和用户模式相同吗? 最佳答案 Linux x86 环使用概述 了
我被引导相信 Pedestal 是 Ring 的替代品,但是从所有示例中我看到 Pedestal 实际上使用了 Ring。这是最令人困惑的!我是否需要了解并了解 Ring 的工作原理才能有效使用 Pe
我复制了一些在 compojure 1.1.18 和其他旧库中工作的旧代码,但使用最新版本我无法让它工作。 这是我的 minimal example code复制自 the minimal examp
为什么 golang 中的列表/环类型为单个项目使用额外的结构 Element/Ring 而不是 interface{} ?我假设有一些好处,但我看不到。 编辑:我的意思是询问 api,而不是关于在实
FileNotFoundException Could not locate ring/util/request__init.class or ring/util/request.clj on cla
使用 Ring 的 Jetty 适配器,如果我的请求太大,我会收到 413: FULL HEAD 错误。我将它追踪到一个名为 headerbuffersize 的属性,但是当我尝试在 run-jett
上下文 我刚刚得到http://blog.jayfields.com/2011/02/clojure-web-socket-introduction.html工作。 我还可以使用ring + comp
我正在尝试创建文本文件的精确副本,并且我正在使用循环缓冲区。 我使用的写入方法是: void addItem(CircularBuffer *cBuff, BufferItem *cbItem) {
void sema_down (struct semaphore *sema) { old_level = intr_disable (); while (sema->value == 0)
我的问题是,如果已经读取了 Ring 请求的正文,我该如何惯用地读取它? 这是背景。我正在为 Ring 应用程序编写一个错误处理程序。当发生错误时,我想记录错误,包括重现和修复错误可能需要的所有相关信
我正在制作一个 Messenger 机器人,并使用 Ring 作为我的 http 框架。 有时我想在机器人发送的消息之间应用延迟。我的期望是使用 Thread/sleep 是安全的,因为这将使事件线程
我在 Emacs 中有以下代码可以删除突出显示区域中的换行符: (defun remove-newlines-in-region () "Removes all newlines in the r
我是 Ring(以及一般的 Clojure 服务器端编程)新手。我有一个基于 Ring 的应用程序,在“开发模式”下运行良好,即它可以监听 localhost:3000 并做出适当的响应。作为部署此应
如何生成监听给定端口的独立环 uberjar ? 开发时,我使用以下 leiningen/ring 命令启动我的应用程序,我可以在其中指定端口: lein with-profile dev ring
我在 Emacs 中有以下代码可以删除突出显示区域中的换行符: (defun remove-newlines-in-region () "Removes all newlines in the r
我有一个任务 - 电话响起时立即更改铃声音量。例如:检测到有来电后,我需要将铃声音量设置为 0(静音),并且还应禁用振动器(如果尚未禁用)。然后当我需要执行另一个代码时会有延迟(startComput
我需要创建带间隙的圆形。 我正在创建一个代表时钟的进度条。 12 个间隙,每个间隙分配给小时数。 这正是我想要实现的目标。 (死星上的外环) 到目前为止,这是我的代码: 在activity.xml
我已经定义了一个简单的环形可绘制对象,将其用作按钮背景。这是我的做法: /> 我在相对布局中使用它,如: round_button 是我定义圆环的 xm
根据这个相关问题(Boost Polygon Serialization)。我正在尝试使用 Boost 序列化多边形。我现在遇到的问题是,我正在尝试使用自定义 X、Y、点的多边形来编译示例,但编译器在
我是一名优秀的程序员,十分优秀!