【问题标题】:Recursive linked list type alias in GoGo中的递归链表类型别名
【发布时间】:2018-05-11 09:47:45
【问题描述】:

我正在尝试将一些 C 代码转换为 Go,我想知道是否存在与以下链表类型等效的 Go:

typedef struct TOKENLIST {
  token item;
  struct TOKENLIST *next;
} token_list_elt, *token_list;

到目前为止,我似乎必须像这样分别创建这两种类型:

type token_list struct {
    item token
    next *token_list
}
type token_list_elt struct {
    item token
    next *token_list_elt
}

对于这个例子来说这没什么大不了的,但是我需要翻译很多像这样的链表类型,其中一些有很多别名和/或结构字段。

【问题讨论】:

  • Go 不太擅长实现通用数据结构。
  • token_list_elt 是结构体,token_list 是指向结构体的指针。是否有理由不能通过在 go 代码中将所有 token_list 类型显式实例化为 &token_list_elt{ ... } 来简单地翻译代码?
  • 这是一个糟糕的例子,其他结构定义不仅仅用于两种类型,其中一种类型是我在这里展示的指针。

标签: c go data-structures struct linked-list


【解决方案1】:

但是为什么不这样使用呢:

type linkedList struct {
    item token
    next *linkedList
}

...

tokenList := linkedList{}
tokenListElt := linkedList{}

不同的结构类型这么重要吗?

【讨论】:

  • 我认为你是对的。拥有不同类型的列表实际上并没有什么好处。我只会使用一种类型。
猜你喜欢
  • 1970-01-01
  • 2012-11-09
  • 2013-07-06
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多