Skip to content

泛型

泛型,另一个翻译叫“通用类型”,他并不是一个真正的类型,而是一个可以接受多种类型的占位符,一般是作为参数存在于函数声明里。

go
// 实现一个单链表,可以存储任意类型

package main

import "fmt"

// 定义链表节点结构
type Node[T any] struct {
	val  T
	next *Node[T]
}

// 在链表头部插入一个元素
// 这里的 * 是指针参数,若是表达式里面的 * 则是解引用。
func Push[T any](v T, head *Node[T]) *Node[T] {
	return &Node[T]{    // & 取指针
		val:  v,
		next: head,
	}
}

// 打印链表
func PrintNode[T any](head *Node[T]) {
	for p := head; p != nil; p = p.next {
		fmt.Println(p.val)
	}
}

func main() {
	// 创建一个 int 节点
	var head *Node[int]

	head = Push(head, 3)
	head = Push(head, 2)
	head = Push(head, 1)

	PrintNode(head)

	fmt.Println("----")

	// 创建一个 string 节点
	var head2 *Node[string]

	head2 = Push(head2, "world")
	head2 = Push(head2, "hello")

	PrintNode(head2)
}