⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Go泛型:类型参数与约束

掌握Go 1.18引入的泛型,编写可复用的类型安全函数和数据结构。 · 难度:入门 · +15XP

Go泛型基础

泛型允许您编写与特定类型无关的代码,通过类型参数(type parameter)实现。语法:func FuncNameT constraint ReturnType。约束(constraint)通常使用interface定义,例如any(所有类型)、comparable(可比较类型)或自定义约束。

常见内置约束

约束说明
any任意类型
comparable支持 == 和 != 的类型
constraints.Ordered支持 < <= > >= 的类型(需导入golang.org/x/exp/constraints)

代码示例:泛型栈

package main

import "fmt"

type Stack[T any] struct { items []T }

func (s *Stack[T]) Push(item T) { s.items = append(s.items, item) }

func (s *Stack[T]) Pop() (T, bool) { if len(s.items) == 0 { var zero T return zero, false } item := s.items[len(s.items)-1] s.items = s.items[:len(s.items)-1] return item, true }

func main() { intStack := Stack[int]{} intStack.Push(10) intStack.Push(20) if val, ok := intStack.Pop(); ok { fmt.Println("Popped:", val) } stringStack := Stack[string]{} stringStack.Push("hello") stringStack.Push("world") fmt.Println(stringStack.Pop()) }

练习提示

实现一个泛型函数MinT constraints.Ordered T,返回较小值。注意导入constraints包。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 142 篇
0 完成
🔥 0