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
相关产品推荐
相关产品推荐

