本文详细介绍了“栈”这一数据结构的特点,并用Golang实现栈。栈是一种FILO(First In Last Out,即先进后出或后进先出)的数据结构。文章展示了如何用slice和链表来实现栈,并通过golang benchmark测试了二者的性能差异。此外,还提供了几个使用栈结构解决的实际算法问题示例,如有效的括号匹配等。
JWT(JSON Web Tokens)由三个部分组成:Header、Payload和Signature。Header通常包含`alg`(算法)和`typ`(类型)字段,如`HS256`或`JWT`。Payload则包括官方标准字段如`iss`(签发人)、`exp`(过期时间)等,以及可自定义的数据,比如用户信息。Signature用于验证JWT未被篡改,通过HMAC算法(如HS256)或非对称加密(如RS256)确保安全性。完整JWT是这三部分经过编码和签名后的结果。
Go 语言在1.18版引入了泛型,旨在简化代码并提高复用性。泛型通过类型参数允许编写通用函数,如一个`Add`函数可以处理整数和浮点数的加法,减少了为不同类型编写重复代码的需求。类型约束(如`int`或`float64`)定义了类型参数适用的范围。编译器自动进行类型推导,简化调用。泛型可用于结构体(如创建泛型缓存)和其他场景,当逻辑相同但涉及不同类型时,可考虑使用泛型。注意泛型在处理自定义类型时,返回值可能是底层类型而非自定义类型,需通过类型约束来保持一致性。