go 泛型

作者: 风亡小窝 | 来源:发表于2023-11-21 17:40 被阅读0次

基本概念

类型形参、类型实参、类型约束和泛型类型

type Slice[T int|float32|float64 ] []T

类型形参 T。类型占位符,不表示具体的类型
类型约束 int|float32|float64。 中间的 | 的意思是告诉编译器,类型形参 T 只可以接收 intfloat32float64 这三种类型的实参
类型参数列表 T int|float32|float64
泛型类型 type Slice[T int|float32|float64 ] []T。完整的泛型类型定义

泛型类型实例化
// 这里传入了类型实参int,泛型类型Slice[T]被实例化为具体的类型 Slice[int]
var a Slice[int] = []int{1, 2, 3} 

类型实参 Slice[int] 中的 int

泛型Receiver

func (s Slice[T]) Sum() T {
    var sum T
    for _, value := range s {
        sum += value
    }
    return sum
}
var s Slice[int] = []int{1, 2, 3, 4}
fmt.Println(s.Sum()) // 输出:10

var s2 Slice[float32] = []float32{1.0, 2.0, 3.0, 4.0}
fmt.Println(s2.Sum()) // 输出:10.0

泛型函数

func Add(a int, b int) int {
    return a + b
}
func Add[T int|float32|float64](a T, b T) T {
    return a + b
}
Add[int](1,2) // 传入类型实参int,计算结果为 3
Add[float32](1.0, 2.0) // 传入类型实参float32, 计算结果为 3.0

Add[string]("hello", "world") // 错误。因为泛型函数Add的类型约束中并不包含string

Go标准库提供的泛型库

slices,maps 库

var list []int{3, 2, 1}

slices.Sort(list) //排序
slices.Reverse(list) //翻转
slices.Contains(list, 1) //是否包含
...
m := map[string]int{
  "a": 1,
  "b": 2,
  "c": 3,
}

maps.Keys(m) //提取 key ["a", "b", "c"]
maps.Values(m) //提取 value [1, 2, 3]
maps.Clone(m) //克隆
...

总结


当你需要针对不同类型书写同样的逻辑,使用泛型来简化代码是最好的 (比如写个队列,写个链表、栈、堆之类的数据结构)
https://segmentfault.com/a/1190000041634906#item-2

相关文章

  • go 泛型

    go 泛型 1. 类型参数(Type parameters) Go语言的泛型(Generic)叫做类型参数。泛型可...

  • 夯实 Java 基础1 - 泛型的使用与原理

    Java 泛型为我们写安全易读的通用程序提供了便利,Go 也将在 2.0 引入泛型。下面首先介绍 Java 泛型的...

  • Golang学习笔记---“泛型”的实现

    Golang学习笔记---“泛型”的实现 大家都知道,go语言中是没有泛型的,但是我们可以通过空接口的方式来实现泛...

  • Go语言 泛型

    本篇文章转载自 在go中使用"泛型" 在进入泛型的话题之前, 首先实现对int 数组切片的冒泡排序: 如你所见, ...

  • go泛型体验

    背景 有了泛型可以做到复用,比如sort,filter,map,reduce等常用方法,这里举个ch的例子我们写g...

  • Go 泛型初体验

    在 Go1.17 中,千呼万唤的泛型终于出来了,但又没有完全出来。在 Go1.17 的发布文档中,并没有提到泛型,...

  • go1.18探索 -- 泛型

    go1.18终于发布了,据说支持了泛型,今天让我来一探究竟。 安装 执行如下命令 确认安装完成 泛型讲解 先看个问...

  • 泛型 & 注解 & Log4J日志组件

    掌握的知识 : 基本用法、泛型擦除、泛型类/泛型方法/泛型接口、泛型关键字、反射泛型(案例) 泛型 概述 : 泛型...

  • go基本语法

    一、总结 1、Go没有对象,没有继承多台,没有泛型,没有try/catch2、Go有接口,函数式编程,csp并发模...

  • 【泛型】通配符与嵌套

    上一篇 【泛型】泛型的作用与定义 1 泛型分类 泛型可以分成泛型类、泛型方法和泛型接口 1.1 泛型类 一个泛型类...

网友评论

      本文标题:go 泛型

      本文链接:https://www.haomeiwen.com/subject/nbabwdtx.html