范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Go1。17初识泛型

  最近,笔者在刷算法题时有这样的苦恼:算法题中会有很多的排序、比较题型,由于Go是强类型语言,就意味着需要针对不同的类型写出若干相同逻辑的代码,且重复度非常高。
  就拿 int、float64 类型的两个数值比较大小来说,有几种写法。 1. 数值比较的几种写法青铜 - 普通写法func TwoIntNumMax(a, b int) int{ 	if a > b { 		return a 	} 	return b }  func TwoFloat64NumMax(a, b float64) float64{ 	if a > b { 		return a 	} 	return b }
  可以看出:除了类型不同,函数体中代码逻辑一模一样。然而,这里仅仅才是两种类型。假设,把所有的数值类型都写上一遍,那代码量也是不少。关键是作为有追求的程序员来说,岂能容忍这种做法。 白银 - 使用 interface 的写法func TwoNumMax(a, b interface{}) (interface{}, error) { 	ta := reflect.ValueOf(a) 	tb := reflect.ValueOf(b)  	switch ta.Kind() { 	case reflect.Int: 		if tb.Kind() != reflect.Int { 			returnnil, ErrType 		}  		if ta.Int() > tb.Int() { 			return a, nil 		} 		return b, nil 	case reflect.Float64: 		if tb.Kind() != reflect.Float64 { 			returnnil, ErrType 		}  		if ta.Float() > tb.Float() { 			return a, nil 		} 		return b, nil 	default: 		returnnil, ErrUnSupport 	} }  func TestMax(t *testing.T) { 	r, err := TwoNumMax(1, 2) 	if err != nil { 		t.Fatal(err) 	} 	 	max := r.(int) 	fmt.Println("max number is ", max) }
  看似只提供了一个比较方法,但是进到该方法才会发现其中的复杂。如果把其他数值类型都写上的话,那么这个方法会变成一个巨无霸。这里使用 interface 相当于把每一种分开写的方法,糅合在了一个方法里面,结果可想而知。
  鉴于以上,在写代码时,笔者感觉很痛苦:究其根源在于写出来的代码量大、重复度高、还不美观。那有没有其他可能? 王者 - 泛型写法// 泛型类型约束,MinMaxAble 代表 多种类型 type MinMaxAble interface {   // 使用 type 来定义支持的类型 	typeint, int8, int16, int32, int64, 		uint, uint8, uint16, uint32, uint64, 		float32, float64 }  // MinMaxAble 泛型类型约束 // T 泛型标识, 可以看做是代表了其支持的类型 func max[T MinMaxAble](a, b T) T { 	if a > b { 		return a 	} 	return b }  func TestMax2(t *testing.T) {     // 写法1 使用 [int] 来明确指明 泛型的类型     maxNum := max[int](1, 2)     fmt.Println(maxNum)      // 写法2 不使用 [int] 来明确指明泛型的类型     // 此时 编译器自己会进行泛型类型推断     maxNum2 := max(1, 2)     fmt.Println(maxNum2)      maxNum3 := max[float64](1.1, 2.1)     fmt.Println(maxNum3)      maxNum4 := max(1.1, 2.1)     fmt.Println(maxNum4) }
  似乎发现了了不起的事情!简简单单几行代码,实现了多种数值类型的数值比较,这是什么黑魔法?
  对此, 需要了解如下信息: 泛型将在  go1.18版本  开始正式支持泛型截止目前(2021/08/20)最新的  go1.17版本  中处于试验阶段go1.17版本 中 开启泛型 ,需要添加 gcflags go run -gcflags=-G=3 ./main.go
  通过 -gcflags=-G=3 在 go1.17 中开启泛型 go1.17版本 中泛型代码方法或函数不可导出  (只能在当前包中使用)2. 如何使用泛型
  如果想在体验泛型乐趣,需要做如下步骤: 升级go版本到 1.17 推荐使用 go 的多版本管理程序  gvm
  https://github.com/moovweb/gvm 编写 泛型示例代码,编译运行时需要添加 gcflags 使用最新版本 Goland IDE ,安装 go1.17 SDK 3. Go泛型示例代码
  关于网上go泛型的示例代码,笔者这里推荐两个地方查看。 https://github.com/mattn/go-generics-example/blob/main/add/main.go go1.17源码中 go1.17/src/go/types/testdata 总结
  对于Go来说,泛型的出现是个必然结果。一方面可以简化代码逻辑,另一方面可以在编译时就能确认类型 (interface 在运行时才能确定类型),对于类型不匹配的情况,不至于在运行时才检测出来导致程序崩溃。
  还有一点需要各位提前做好准备,等到 go1.18版本 之后,Go的标准库、各种知名库包以及开源程序,一定会基于泛型进行较大的改动。
  路漫漫其修远兮吾将上下而求索,笔者相信Go的未来是光明的。

哪个App播放器音质最好,无损音乐最多?我习惯把音乐下载下来听,用Foorbar2000播放。既然听无损就不用考虑音效了。原汁原味播放就是最好,还原音乐本来面目。所以手机我推荐本地播放器。电脑我推荐foobar2000。AppleWatchSeries7正式上市,依旧加量减价,它值得购买吗?苹果在9月份的发布会中,推出了AppleWatchSeries7,不过当时并没有正式上市,只是表示秋末发售。10月8日晚上8点,苹果正式上市了AppleWatchSeries7。这净水器排名有哪些品牌推荐冰尊净水器是世界净水器十大排名领导品牌。从传统净水器,到现在的厨房净水全屋净水,净水产品在不断升级迭代,净水器技术一直在优化升级,给中国的万千家庭带去了健康的饮水生活。下面就为大家资深Linux运维工程师必须掌握的核心命令查看计算机硬件系统信息服务器核心硬件就是CPU内存磁盘和网卡,它们配置的好坏会影响程序的运行效率,我们可以使用命令的方式查看服务器硬件的配置查看CPU信息查看CPU信息可以使用ls未来三年,青浦区发展潜力如何,入手亏吗?前途一片光明,前景不可限量上海未来重点发展大虹桥和五大新城,青浦这两个都有,前景很好,值得入手。青浦未来可期,青浦赵巷漕河泾开发区引进高科技人才11万人口,朱家角华为产业园已经拿地有多少人信了读书不如去打工?读书不如去打工,读书开始是挣不到钱的,还要花钱,最少书要花钱买的。打工是打一天工挣一天钱的,能不能拿到是另外一回事。读书是可以挣长远的,不要挺卖力气的钱,有可能岁数越大挣的越多噢偷高密的父老乡亲对莫言是怎样的评价?好吧,既然头条推荐了你提出的问题,做为高密人,我就简单回答吧,我只回答我所了解的事实,对莫言不做任何评价。莫言,本名管谟业,出身中农。1955年2月17日(农历正月25),出生于山花1999买了款红米K40,回来对比IQOOZ5后这下纠结了随着科技的不断发展,手机市场也迎来了大洗牌,以前的手机龙头华为如今已经暂时退圈,而二哥小米则靠着格局和战略做到了全球第二,继华为之后再次硬刚苹果。尤其是今年,小米和旗下的红米都推出苹果下周二还有发布会?新机比iPhone13贵一倍国庆假期结束了,上班第一天急需来点爆炸消息让人清醒清醒!时隔大半个月,苹果第二场发布会就要来了!外媒曝光将在10月12日举行,依然是以线上的形式召开。主要的产品为AirPods3以看家竟然如此简单小豚当家智能摄像头在1。0时代,就在视觉体验上极大满足了用户的需求。此次小豚摄像头双频版上线,华为和小豚当家在产品研发上做了充足的努力,性能做了大提升!采用了双频WiFi提升了设备马斯克晋升全球首富!旗下SpaceX估值已超1000亿美元财联社(上海,编辑周玲)讯,据报道,在本周内部人士宣布二次售股后,特斯拉CEO埃隆马斯克(ElonMusk)旗下太空探索技术公司SpaceX估值已超过1000亿美元。这意味着马斯克
飞腾公司基于飞腾芯片的服务器首次入围中国移动中国电信集采飞腾公司基于飞腾芯片的服务器首次入围中国移动中国电信集采科创板日报4日讯,科创板日报记者从飞腾公司获悉,其腾云S2500双路服务器日前已通过运营商测试,并且基于飞腾腾云S2500芯汇川技术将会陆续推出重载型六关节机器人e公司讯,汇川技术在机构调研时表示,公司工业机器人业务,过去销售的产品以小负载型SCARA和小六轴机器人为主,主要应用于3C锂电光伏等下游行业。目前,公司正在针对特定行业客户群需求无需改造轨道,秒变智能窗帘,小米发了一款居家神器对于小编这种懒癌患者来说,每天睡觉前要把窗帘拉上,早上出门还要再拉开,于我而言可以说真的非常麻烦(嗯,就是这么懒哈哈哈),所以为了节约小编的时间(这种痛苦),我就开始在网上开始寻宝这才叫一键智能修图!你那只能叫一键美化!快来看看吧不管是自拍还是外出旅游照片怎么才能在朋友圈收集更多的赞今天笨笨给小伙伴推荐一款全新智能修图插件简直是朋友圈点赞收割机版本PSCC20152021系统兼容WINMAC系统大小1。37智能化工厂管理与应用课程背景我们国家正处在一个大的结构转型升级这么一个时代,现有的技术已不足以支撑经济的快速发展,需要新的技术突破。现在全球面临整个的制造模式也不可持续,必须我们要变革我们现有的模式,山寨机教母转战芯片,大佬撑腰难顶连年亏损山寨机教母转战芯片,华为小米OPPO这些大佬争先捧场。话说在当年的诺基亚统治时代,有一款国产手机横空出世,跟诺基亚打得不分上下,甚至被称为国产手机之王。在当时,它就是MadeinC美图2021年调整净利润8510万元,投资加密货币浮盈3。97亿元北京商报讯(记者岳品瑜廖蒙)3月30日,美图发布2021年财报显示,2021年收入为16。66亿元,同比增长39。5公司拥有人应占经调整利润净额为8510万元,同比增长39。7。公为什么说vivo手机是淘汰产品我之前打游戏的,小游戏打遍了!后来打传奇。玩物丧志,听的看的也少了。一个月前学了五天剪映,就来到这里,学的还不够齐全,许多功能没打开,弄这个也很费劲。来到这里就是和大家共同切磋,把最新补贴来了!海南省2022年鼓励使用新能源汽车若干措施印发新海南客户端南海网南国都市报3月30日消息(记者姚皓)日前,海南省工业和信息化厅印发海南省2022年鼓励使用新能源汽车若干措施(下称措施),加快海南省新能源汽车推广应用,确保202京东方A2021年营收首次突破2000亿元净利润同比增长412。96彭思雨中国证券报中证网中证网讯(记者彭思雨)3月30日晚间,京东方A发布2021年年报,公司全年营收首次突破两千亿元,达2193。10亿元,同比增长61。79,归母净利润达258。我科研团队研发出新型交替型齐聚物材料科技日报常州3月29日电(记者过国忠通讯员包海霞蔡震宇任涛)记者29日从常州大学了解到,该校材料科学与工程学院朱卫国教授团队与香港理工大学李刚教授团队联合,在国家自然科学基金江苏省