当前位置: 首页 > 科技观察

GoGenerics:地图包正式发布并可用!

时间:2023-03-11 22:57:55 科技观察

本文转载自微信公众号《我的大脑是炸鱼》,作者陈建宇。转载本文请联系脑筋急转弯公众号。大家好,我是炸鱼。给大家带来一个关于泛型的新消息,那就是:日前,Go泛型的配套标准库Golang.org/x/exp/maps包已经正式提交发布,并可以使用了。如下图:cs.opensource.google包代码如下:packagemapsfuncKeys[M~map[K]V,Kcomparable,Vany](mM)[]K{r:=make([]K,0,len(m))fork:=rangem{r=append(r,k)}returnr}funcValues[M~map[K]V,Kcomparable,Vany](mM)[]V{r:=make([]V,0,len(m))for_,v:=range{r=append(r,v)}returnr}funcEqual[M1,M2~map[K]V,K,Vcomparable](m1M1,m2M2)bool{iflen(m1)!=len(m2){returnfalse}fork,v1:=rangem1{ifv2,ok:=m2[k];!ok||v1!=v2{returnfalse}}returntrue}funcEqualFunc[M1~map[K]V1,M2~map[K]V2,Kcomparable,V1,V2any](m1M1,m2M2,eqfunc(V1,V2)bool)bool{iflen(m1)!=len(m2){returnfalse}fork,v1:=rangem1{ifv2,ok:=m2[k];!ok||!eq(v1,v2){returnfalse}}returntrue}funcDeleteFunc[M~map[K]V,Kcomparable,Vany](mM,delfunc(K,V)bool){fork,v:=rangem{ifdel(k,v){delete(m,k)}}}Keys:返回map的键值内容,键值会出现在不确定的命令。values:返回地图的值,值会以不确定的顺序出现。相等:检查两个映射是否包含相同的键/值对,内部使用==来比较值。EqualFunc:EqualFunc与Equal方法类似,但使用闭包方法比较值,key值仍然与==进行比较。DeleteFunc:删除闭包方法返回true的映射中的任何键/值对。funcClear[M~map[K]V,Kcomparable,Vany](mM){fork:=rangem{delete(m,k)}}funcClone[M~map[K]V,Kcomparable,Vany](mM)M{r:=make(M,len(m))fork,v:=rangem{r[k]=v}returnr}funcCopy[M~map[K]V,Kcomparable,Vany](dst,srcM){fork,v:=rangesrc{dst[k]=v}}清除:清除从地图中删除所有条目,使其为空。克隆:返回地图的一个副本,这是一个浅克隆,使用普通赋值设置新复制的键和值。Copy:复制src中的所有key/value对,并添加到dst中。当src中的某个键已经存在于dst中时,dst中的值将被与src中的键关联的值覆盖。本次Go泛型库映射的更新主要包括最新泛型特性的迭代,即“近似元素”,源码地址:https://cs.opensource.google/go/x/exp/+/master:地图/maps.go。