go1.8-泛型
基本思想:
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-泛型的更多相关文章
- go1.18泛型的简单尝试
今天golang终于发布了1.18版本,这个版本最大的一个改变就是加入了泛型.虽然没有在beta版本的时候尝试泛型,但是由于在其他语言的泛型经验,入手泛型不是件难事~ 官方示例 Tutorial: G ...
- Go1.14发布了,快来围观新的特性啦
如期而至,Go1.14发布了,和往常一样,该版本保留了Go 1兼容性的承若,这个版本的大部分更新在工具链 .运行时库的性能提升方面,总的来说,还是在已有的基础上不断优化提成,大家期待的泛型还没有到来, ...
- go泛型教程
泛型 原文 在线阅读 导读: 约束 使用方法 实现原理 跟其它语言的泛型进行对比 用例子学泛型 issues 泛型需满足 go1.18+ 约束 go使用interface作为约束,约束的意思是约束了这 ...
- Go 1.18泛型的局限性初探
前言 Go 1.18 版本之后正式引入泛型,它被称作类型参数(type parameters),本文初步介绍 Go 中泛型的使用.长期以来 go 都没有泛型的概念,只有接口 interface 偶尔类 ...
- go-zero单体服务使用泛型简化注册Handler路由
一.Golang环境安装及配置Go Module https://go-zero.dev/cn/docs/prepare/golang-install mac OS安装Go# 下载并安装Go for ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- C#4.0泛型的协变,逆变深入剖析
C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)
建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
随机推荐
- pycharm设置python头文件模版
钢铁知识库,一个学习python爬虫.数据分析的知识库.人生苦短,快用python. 使用pycharm创建python文件时候,有时候需要自动生成想要的文件头,如何生成呢? 只需要以下几步: 在fi ...
- Python修改柱状图边缘柱子与图边界的距离
本文介绍基于Python中matplotlib.pyplot模块,修改柱状图.条形图最两侧的柱子与图像边缘之间距离的方法. 最近,绘制了一个水平的柱状图,但是发现图的上.下边距(不是柱子与柱子 ...
- 报错One record is expected, but the query result is multiple records
总结:出现这种情况,显而易见,就是查询的数据在数据库中不止一条,而我调用的selectOne方法,返回值是一个User对象,导致报错 点击查看错误代码 LambdaQueryWrapper<Us ...
- DJI Flight Simulator 无人机模拟器 功能介绍与使用说明
0 前言 无人机是当前非常火热的"相机设备",而大疆又是其中翘楚,功能丰富,可以说是一个将带着云台的智能手机放到了天空中.如果你有自己玩过旋翼无人机航模的话,可能会体会到大疆的另一 ...
- mysql02-配置文件my.ini
https://www.cnblogs.com/isme-zjh/p/11542106.html 1.mysql安装-连接 1.1安装 略 1.2连接-退出 连接 mysql –h 主机 ...
- Activiti01-基本介绍
1.工作流的定义 工作流是将一组任务组织起来以完成某个有序的过程:定义了任务的触发顺序和触发条件,而且每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成, 还可以由一个或多个人与软件系统协 ...
- .NET Core 项目启动时运行定时任务
1.任务需求 在每次服务启动时定时(如24小时)清理一次缓存文件 2.代码实现 1)新建文件清理类 .NET Core 提供了BackgroundService的抽象类,在 ExecuteAsync ...
- NetApp DataONTAP 集群模式 学习笔记1
一.NetApp存储操作系统 Data ONTAP是NetApp最流行的存储操作系统,它运行在NetApp FAS(Fabric Attached Storage)系统上.FAS系统是被设计为共享的存 ...
- 【KAWAKO】RNNoise-将模型做成接口并交叉编译到RK3308上
目录 做成接口 rnnoise_inference.h rnnoise_inference.cpp 使用方法(主要部分) 交叉编译 编译出动态链接库 使用编译出的动态链接库进行推理 做成接口 RNNo ...
- LeetCode 39. 组合总和 40.组合总和II 131.分割回文串
欢迎关注个人公众号:爱喝可可牛奶 LeetCode 39. 组合总和 40.组合总和II 131.分割回文串 LeetCode 39. 组合总和 分析 回溯可看成对二叉树节点进行组合枚举,分为横向和纵 ...