热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享Go1.18都出泛型了速来围观

go泛型使用的官方说明:https:go.devdoctutorialgenerics在使用之前先把go更新到1.18或者以上的版本:https:go.devdocinstall如

go泛型使用的官方说明:https://go.dev/doc/tutorial/generics

在使用之前先把go更新到1.18或者以上的版本:https://go.dev/doc/install

如果用过c++或者java的话,那么对泛型这个概念应该是不陌生的。(下面这段定义摘抄自百度百科)
泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。

我们可以用个简单的例子来看看如何使用泛型。

在没有泛型之前,如果我们要写一个比较大小的函数的话,因为go里面没有函数重载的概念,所以我们必须对需要比较的类型都创建一个比较函数,不过这样的话,就会有大量逻辑重复的代码,他们的区别只是变量的类型不同罢了。

package main    import "fmt"  func maxint(a, b int) int {  	if a > b {  		return a  	} else {  		return b  	}  }  func maxfloat32(a, b float32) float32 {  func main() {  	var a, b int  	var c, d float32  	a = 1  	b = 2  	c = 1.1  	d = 1.4  	fmt.println(maxint(a, b))  	fmt.println(maxfloat32(c, d))

那么泛型该如何使用呢?
go预留了一个泛型,名为comparable,这是官方定义的一个可比较的类型约束

// comparable is an interface that is implemented by all comparable types  // (booleans, numbers, strings, pointers, channels, arrays of comparable types,  // structs whose fields are all comparable types).  // the comparable interface may only be used as a type parameter constraint,  // not as the type of a variable.  //翻译如下  //comparable是由所有可比较类型实现的接口  //(布尔、数字、字符串、指针、通道、类似类型的数组、,  //字段均为可比较类型的结构)。  //可比接口只能用作类型参数约束,  //不是作为变量的类型。  type comparable interface{ comparable }  

我们可以来自己声明一个类型约束。

type number interface {  	int | int32 | int64 | float32  }  

如上定义表示如果参数类型要为intint32int64float32这四个类型其中一个的适合,可以用number替代。
所以我们可以把最初比较大小的代码进行修改、简化一下。

package main    import "fmt"  type number interface {  	int | int32 | int64 | float32  }  func maxnumber[k number](a k, b k) k {  	if a > b {  		return a  	} else {  		return b  	}  func main() {  	var a, b int  	var c, d float32  	a = 1  	b = 2  	c = 1.1  	d = 1.4  	fmt.println(maxnumber(a, b))  	fmt.println(maxnumber(c, d))

在函数名后面用在中括号中使用类型约束,这时候在函数里面k就表示number这个类型约束,然后可以用在函数的参数列表、函数体、返回值中。

加入需要用到以int或者float32等基本类型为基础的类型时,例如type myint int,需要在类型名前面加上~

type number interface {   	~int     }  

如果不加的话,使用时会出现如下错误提示

# generics-demo
.main.go:23:23: myint does not implement number (possibly missing ~ for int in constraint number)

到此这篇关于go1.18都出泛型了,不来试试看?的文章就介绍到这了,更多相关go1.18泛型内容请搜索<编程笔记>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<编程笔记>!

需要了解更多python教程分享Go1.18都出泛型了速来围观,都可以关注python教程分享栏目&#8212;编程笔记


推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
author-avatar
手机用户2502913717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有