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