Go 泛型:Maps 包正式释出,现在可用!

开发 后端
给大家带来一个关于泛型的新消息,那就是:在几天前,Go 泛型的配套标准库 golang.org/x/exp/maps 包已经正式提交,放出来了,可以使用。

[[437742]]

本文转载自微信公众号「脑子进煎鱼了」,作者 陈煎鱼   。转载本文请联系脑子进煎鱼了公众号。

大家好,我是煎鱼。

给大家带来一个关于泛型的新消息,那就是:在几天前,Go 泛型的配套标准库 golang.org/x/exp/maps 包已经正式提交,放出来了,可以使用。

如下图:

cs.opensource.google

包代码如下:

  1. package maps 
  2.  
  3. func Keys[M ~map[K]V, K comparable, V any](m M) []K { 
  4.  r := make([]K, 0, len(m)) 
  5.  for k := range m { 
  6.   r = append(r, k) 
  7.  } 
  8.  return r 
  9.  
  10. func Values[M ~map[K]V, K comparable, V any](m M) []V { 
  11.  r := make([]V, 0, len(m)) 
  12.  for _, v := range m { 
  13.   r = append(r, v) 
  14.  } 
  15.  return r 
  16.  
  17. func Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool { 
  18.  if len(m1) != len(m2) { 
  19.   return false 
  20.  } 
  21.  for k, v1 := range m1 { 
  22.   if v2, ok := m2[k]; !ok || v1 != v2 { 
  23.    return false 
  24.   } 
  25.  } 
  26.  return true 
  27.  
  28. func EqualFunc[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool { 
  29.  if len(m1) != len(m2) { 
  30.   return false 
  31.  } 
  32.  for k, v1 := range m1 { 
  33.   if v2, ok := m2[k]; !ok || !eq(v1, v2) { 
  34.    return false 
  35.   } 
  36.  } 
  37.  return true 
  38.  
  39. func DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool) { 
  40.  for k, v := range m { 
  41.   if del(k, v) { 
  42.    delete(m, k) 
  43.   } 
  44.  } 
  • Keys:返回 map 的键值内容,键值将以不确定的顺序出现。
  • Values:返回 map 的值,值将以不确定的顺序出现。
  • Equal:检查两个地图是否包含相同的键/值对,内部会使用 == 来比较数值。
  • EqualFunc:EqualFunc与 Equal 方法类似,但使用闭包方法来比较数值,键值仍然用 == 来比较。
  • DeleteFunc:删除 map 中闭包方法返回 true 的任何键/值对。
  1. func Clear[M ~map[K]V, K comparable, V any](m M) { 
  2.  for k := range m { 
  3.   delete(m, k) 
  4.  } 
  5.  
  6. func Clone[M ~map[K]V, K comparable, V any](m M) M { 
  7.  r := make(M, len(m)) 
  8.  for k, v := range m { 
  9.   r[k] = v 
  10.  } 
  11.  return r 
  12.  
  13. func Copy[M ~map[K]V, K comparable, V any](dst, src M) { 
  14.  for k, v := range src { 
  15.   dst[k] = v 
  16.  } 

Clear:清除从 map 中删除所有条目,使之为空。

Clone:返回一个 map 的副本,这是一个浅层克隆,新拷贝出来的的键和值使用普通的赋值来设置。

Copy:复制 src 中的所有键/值对,并将其加入 dst。当 src 中的一个键已经存在于 dst 中时,dst 中的值将被与 src 中的键相关的值所覆盖。

 

本次 Go 泛型库 maps 的更新,主要包含了泛型最新的特性的迭代,也就是 “近似元素”,源码地址:https://cs.opensource.google/go/x/exp/+/master:maps/maps.go。

 

责任编辑:武晓燕 来源: 脑子进煎鱼了
相关推荐

2021-12-05 23:45:23

Go泛型Maps

2021-08-09 10:36:20

GoSlices Maps

2021-12-15 10:23:56

Go 1.18 Bet语言泛型

2021-11-27 22:20:13

SlicesGo泛型

2021-09-29 18:17:30

Go泛型语言

2021-01-14 05:20:48

Go语言泛型

2022-03-18 18:00:00

编程语言泛型支持模糊测试

2020-11-24 13:05:35

Go语言泛型

2024-10-28 00:40:49

Go语法版本

2022-04-28 12:00:34

Go泛型版排序

2022-03-28 13:34:26

Go泛型部署泛型

2023-11-03 14:02:04

Go切片泛型库

2023-11-29 08:19:45

Go泛型缺陷

2022-04-15 09:55:59

Go 泛型Go 程序函数

2023-05-05 08:51:18

Go语言泛型

2022-03-29 11:48:40

Go泛型测试

2021-11-01 12:41:39

Go

2021-12-30 18:34:29

缓存GoSinglefligh

2021-12-28 07:20:44

泛型Go场景

2021-12-13 08:52:42

Go 泛型
点赞
收藏

51CTO技术栈公众号