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

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的未来是光明的。

苹果大中华区目前已拥有超过440万注册开发者中证网讯(记者张兴旺)5月31日,苹果发布消息称,自2008年AppStore推出至今,iOSApp经济已成为飞速发展的业务之一。在AppStore的助力下,越来越多的开发者满怀热5G医疗的拓展方向与挑战5G医疗的发展给传统医疗行业赋能,现存医疗体系的痛点被期待因新技术的不断完善而全面解决,但是这种期待的本身就成了解决问题的枷锁,技术的发展及应用不能脱离现实社会的实际情况,同时它的6G立体泛在智联天下来源人民日报海外版黄维肖像画。本栏目画家张武昌绘廖建新肖像画。本栏目画家张武昌绘中国科学院院士黄维(中)受聘为科技部6G研发国家重点专项咨询专家。移动通信以大概十年为周期发展演进,小米官方科普NFC3。0超级门卡怎么使用IT之家5月31日消息小米在4月份的RedmiK40游戏增强版手机发布会上,首次公布了基于NFC技术的小米超级门卡功能,在上周举行的RedmiNote10系列手机的发布会上,小米超上半年最热门的四款3000档手机,使用一个月后,大家怎么说?2021上半年过半,回顾各大手机厂商发布的机型,3000档最热门的机型应该是下面这4款了,在使用一个月甚至更长时间之后,大家对这四款手机的评价如何呢?不妨先看看,然后再做决定。小米华为Mate40PRO使用感受优点极具个性的后盖设计辨识度直接拉满1。第一梯队的拍照效果(拍照体验不太好)还不错的屏幕表现(指钻排和新周)还能听的过去的双扬声器独特的鸿蒙带来的稳定流畅的系统体验不敢说最好但绝对权威认证背后一群腾讯安全侠的信任江湖互联网江湖,偷袭和背叛无处不在。2018年6月,特斯拉指控前员工MartinTripp侵入特斯拉制造操作系统,将几个G的机密数据传输给外部机构,以此蓄意破坏生产。今年4月以来,互联假设五菱和小米如果合作,能碰撞出怎样的火花?在小米集团宣布进军电动汽车领域之后,对于小米会造什么定位的汽车的讨论始终没有停歇以近两年小米商品的定位提升速度为参考,比如11ultra与MIXFOLD,也许打造一款定位重合小鹏蔚小米要永远做手机充电领导者,OPPO会答应吗?5月30日小米官方为新的充电技术进行预热,当时大家根本没有想到小米会把有线无线的充电功率拉升到如此的高度。5月31日官方正式发布200W有线120W无线充电技术,与此同时在宣传语中腾讯科技向善,应在青少年模式上再接再厉近两年来,随着视频化表达的流行,越来越多的青少年成为短视频消费者,有些还成为颇具潜力的创作者,如何保障他们安全上网一直是个难题。在此背景下,青少年模式成为监管部门指导各平台推出的一比特币失守35000美元,爆仓数十亿美元,比特币矿机停摆比特币价格失守35000美元加密货币的调节并沒有终止的发展趋势,继周五跌穿3。六万美金以后,礼拜天比特币再次大幅度下挫。中国北京时间5月30日星期日早上,比特币下挫6。7报3360
推荐几款好用的远程控制软件1向日葵远程控制向日葵远程控制软件是一款获得微软认证,界面友好,简单易用,安全放心,且身材迷你小巧。通过向日葵,你可以在世界上任何地点任何网络中,轻松实现手机控制手机,手机控制电脑进大厂必备云原生基础入门手册都2021年了,还不知道云原生,那真的就Out了!2019年被认为是云原生技术普及元年。阿里巴巴宣布要全面上云,而且上云就要上云原生,同时以云为核心的软件研发思想,正逐步成为所有开100道Linux面试通关汇总可做学习资料使用Linux是入门IT行业的基础技能,也是程序员面试路上的必考题!有很多刚入行it行业的同学经常问我们,要学会Linux需要多长时间,其实这是一个很不好回答的问题,也算是一个伪命题,613页Linux命令行宝典,实用全面即查即用,PDF仅分享3天如果你在刚开始在Linux系统中使用命令行工具,那么你应该知道它是Linux操作系统中功能最强大和有用的工具之一,但在命令行中,有时候也会遇到一些不便捷的情况,而以往的操作方法虽然错过上个村,幸好还有这个店,GPDMicroPC迎来京东众筹熟悉GPD这个品牌的朋友应该都知道,GPD旗下的首款面向工程师的口袋电脑GPDMicroPC已结束预售1个多月了,现在看着评论页面下的好评和网友们把玩小电脑的神气模样,持币观望的朋GPDP2Max,你看这个本又大又小,它其实是一台超级电脑你看这个面又长又宽,就像这个碗又大又圆,虽然大家一直在吐槽这么没水平的freestyle,但是吴亦凡真的是具有娱乐精神,居然还出了大碗宽面这么一首rap,并且还得到了王校长的好评。米物无线办公键鼠套装,轻松摆脱连接线的束缚不知道大家是否还记得罗老师的TNT,就是那个摒弃鼠标键盘,企图改变电脑交互方式对个人电脑进行革命的显示器,当然它谁的命也没有革成。因为,在现阶段键盘鼠标仍然是我们最熟悉舒服使用率最16G内存,超极本GPDP2Max就是这么实在开学在即,又来了一波笔记本电脑的购机热潮。笔者作为老一代资深电脑DIYer,虽然不攒机都好多年了,但还是免不帮忙给同事朋友的孩子们选电脑,关系好的直接给定型号,关系远点的提些建议。GPDWIN2掌上电脑,打破游戏和工作的界限随着社会的包容与开放,游戏再也不是人人喊打的洪水猛兽,就连电竞行业都逐渐被大家所接受。作为以游戏为消遣的年轻人,再也不用整日背负玩游戏的负罪感。诚然,游戏可以给我们紧张的生活添加乐GPDP2Max,不走寻常路的超极本提起超极本,相信大家首先想到的是MacBookPro,然后是微软的Surface,不错,这两款对标的产品无论是在性能还是工业设计上,都很厉害,当然售价也很厉害。不过,他们始终在一个牛听听读书牛,让宝宝绘本读得开心学得牢固不能让孩子输在起跑线上!虽然我们有时不喜欢这句功利的口号,但是我们大多数家长又不能免俗,早早的就开始了孩子的教育国学唐诗英语等等等等。一次次的把起跑线前移。那么,既然要学,我们何不