基本思想:

Parametric Polymorphism(形式)参数多态

基本语法

package main

import "fmt"

func printSlice[T any](s []T){
for _,v:=range s{
fmt.Printf("%v",v)
}
fmt.Print("\n")
}
func main() {
printSlice[int]([]int{66,77,88,99,100})
printSlice[float64]([]float64{1.1,2.2,3.3,4.4,5.5})
printSlice[string]([]string{"红烧肉","清蒸鱼","大闸蟹","九转大肠","重烧海参"})
printSlice([]int64{55,44,33,22,11})
}
  • go run -gcflags=-G=3 path/main.go
  • [T any]

    参数的类型,该函数支持任何T类型

    在调用这个泛型函数的时候,可以显示指定类型参数,也可省略

泛型切片声明切片类型

带有类型参数的类型被叫做泛型类型。下面定义一个底层类型为切片类型的新类型vector.它可以存储任何类型的切片。要使用泛型类型,要先对其进行实例化,就是给类型参数指定一个实参

package main

import "fmt"

type vector[T any] []T

func printSlice[T any](s []T){
for _,v:=range s{
fmt.Printf("%v",v)
}
fmt.Print("\n")
} func main() {
v:=vector[int]{58,188}
printSlice(v)
vv:=vector[string]{"红烧肉","九转大肠"}
printSlice(vv)
}

泛型函数

package main

import "fmt"

type Addable interface{
type int,int8,int16,int32,int64,uint,uint8,uint16,uint32,uint64,
uintptr,float32,float64,complex64,complex128,string
} func add[T Addable](a,b T) T {return a+b} func main() {
fmt.Println(add(3,4))
fmt.Println(add("go","lang"))
}

新增了类型列表表达式,它是对类型参数进行约束

如果编译器通过得到的类型在Addable这个接口定义列表中,那么就可以允许这个类型参数实例化,否则就会报错。

interface约束泛

package main

import (
"strconv"
"fmt"
) type Price int type ShowPrice interface {
String() string
} func (i Price) String() string {
return strconv.Itoa(int(i))
} func showPriceList[T ShowPrice](s []T)(ret []string){
for _,v:=range s{
ret=append(ret, v.String())
}
return ret
} func main() {
fmt.Printf("%T",showPriceList([]Price{22,33,55,88,99}))
}

go1.8-泛型的更多相关文章

  1. go1.18泛型的简单尝试

    今天golang终于发布了1.18版本,这个版本最大的一个改变就是加入了泛型.虽然没有在beta版本的时候尝试泛型,但是由于在其他语言的泛型经验,入手泛型不是件难事~ 官方示例 Tutorial: G ...

  2. Go1.14发布了,快来围观新的特性啦

    如期而至,Go1.14发布了,和往常一样,该版本保留了Go 1兼容性的承若,这个版本的大部分更新在工具链 .运行时库的性能提升方面,总的来说,还是在已有的基础上不断优化提成,大家期待的泛型还没有到来, ...

  3. go泛型教程

    泛型 原文 在线阅读 导读: 约束 使用方法 实现原理 跟其它语言的泛型进行对比 用例子学泛型 issues 泛型需满足 go1.18+ 约束 go使用interface作为约束,约束的意思是约束了这 ...

  4. Go 1.18泛型的局限性初探

    前言 Go 1.18 版本之后正式引入泛型,它被称作类型参数(type parameters),本文初步介绍 Go 中泛型的使用.长期以来 go 都没有泛型的概念,只有接口 interface 偶尔类 ...

  5. go-zero单体服务使用泛型简化注册Handler路由

    一.Golang环境安装及配置Go Module https://go-zero.dev/cn/docs/prepare/golang-install mac OS安装Go# 下载并安装Go for ...

  6. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  7. .NET面试题系列[8] - 泛型

    “可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...

  8. C#4.0泛型的协变,逆变深入剖析

    C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...

  9. 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)

    建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...

  10. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

随机推荐

  1. 淘宝数据采集之js采集

    搜索页面采集,数据在控制台哦!!! 搜索页面采集,数据在控制台哦!!! 搜索页面采集,数据在控制台哦!!! 既然能打到控制台,当然也能传到系统!!! 既然能打到控制台,当然也能传到系统!!! 既然能打 ...

  2. JAVA虚拟机13-字节码指令简介

    1.简介 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需的参数(称为操作数,Operand)构成.JVM指令=1字节 ...

  3. win10使用python自动化安装mysql8.0.11

    流程概要 下载mysql-8.0.11-winx64压缩包 解压 编辑配置文件my.ini 管理员权限cmd安装(注意初始化时设置默认密码为空) pymysql连接,执行sql操作. 代码实现 依赖: ...

  4. .net 字符串逗号隔开去重

    1.本文背景 同时输入/选择多条信息或批量输入/选择多条信息形成一个逗号隔开的字符串集,会出现数据重复的错误情况,产生不必要的脏数据,本文依次收集测试几种有效的去重方法. 2.代码实现 1)方法一:L ...

  5. .NET Core MongoDB的简单使用

    一.创建测试库.测试表.添加测试数据 使用之前文章提到的MongoDB Compass用法分别添加数据库[myDb]和集合(表)[userinfos]信息, 参考链接为:MongoDB Compass ...

  6. 视觉十四讲:第六讲_ceres非线性优化

    使用Ceres求解非线性优化问题,一共分为三个部分: 1. 第一部分:构建cost fuction,即代价函数,也就是寻优的目标式.这个部分需要使用仿函数(functor)这一技巧来实现,做法是定义一 ...

  7. C++ 练习10 动态分配内存

    动态分配内存可以使的程序在内存中更加灵活地使用 动态分配数组使用new函数 1 #include <iostream> 2 constexpr auto N = 5; 3 using na ...

  8. element plus + vue3表单第一次数据未清空的bug问题解决

    使用框架:element Plus + vue3 场景描述: 场景一: 表单的添加和修改功能,公用同一个弹框,点击修改后,点击添加表单显示的是上次修改的数据. 场景二: 点击修改,数据回显到表单,然后 ...

  9. pdf转MD、HTML、word网址收集

    PDF 转 Word,Excel,PPT,JPG 的网址:https://smallpdf.com/cn/pdf-to-word PDF 转 Markdown 的网址:https://pdf2md.m ...

  10. 网页怎样引入本地硬盘上的JS文档

    网页通过<script>标记可以引入在线的js文档,只有把网页保存在本地硬盘才能使用相对路径引入本地js文档,普通浏览器难以实现在线页面上引入本地js文档.怎么解决这个问题呢? 首先准备好 ...