You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言:如何定义支持多种类型的链表结构体?

解决方案:使用Go泛型实现通用链表节点

当然有可行方案,Go 1.18及以后版本支持的泛型就是完美选择——既能用单一结构体支持任意类型,又完全避免了interface{}带来的断言开销和类型安全隐患。

泛型链表节点结构体定义

// Node是支持任意类型的双向链表节点,T为类型参数
type Node[T any] struct {
    Value T
    Next  *Node[T]
    Pre   *Node[T]
}

实际使用示例

  • 创建存储int类型的链表节点:
// 初始化一个值为10的int节点
intNode := &Node[int]{Value: 10}
// 创建后续节点并关联前驱
nextIntNode := &Node[int]{Value: 20, Pre: intNode}
intNode.Next = nextIntNode
  • 创建存储string类型的链表节点:
// 初始化一个值为"hello"的string节点
strNode := &Node[string]{Value: "hello"}
// 创建后续节点并关联前驱
nextStrNode := &Node[string]{Value: "world", Pre: strNode}
strNode.Next = nextStrNode

优势说明

泛型在编译阶段就会为每个实际使用的类型生成对应的具体代码,运行时没有额外的类型断言开销;同时编译期会严格检查类型匹配,比如不能把Node[int]类型的节点赋值给Node[string]的指针,从根源避免了类型错误。

内容的提问来源于stack exchange,提问作者Pccc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:25:58