本文转载自微信公众号「脑子进煎鱼了」,作者陈煎鱼。转载本文请联系脑子进煎鱼了公众号。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、雅安服务器托管、营销软件、网站建设、商洛网站维护、网站推广。
大家好,我是煎鱼。
现在是 2021 年 8 月份了,根据 Go 语言发布周期的 2,8 原则。Go 1.17 即将发布,在写这篇文章时,现在已经进行到了 rc2:
这意味着离 Go1.18 释出泛型的正式支持又近了一点点,社区中讨论泛型相关的周边功能的声音又多了起来。
今天要讨论的泛型版功能支持也是如此,分别包含:map(#47330)、slice(#45955)、container/set(#47331) 三种通用类型的支持。
我们主要展开 maps 和 slices,其余的都大同小异,理解核心思想就好。
maps
该提案建议定义一个新的包 maps,它将提供可用于任何类型的 map 的函数:
下面的描述侧重于描述 API 的提供:
- package maps
- func Keys[K comparable, V any](m map[K]V) []K
- func Values[K comparable, V any](m map[K]V) []V
- func Equal[K, V comparable](m1, m2 map[K]V) bool
- func EqualFunc[K comparable, V1, V2 any](m1 map[K]V1, m2 map[K]V2, cmp func(V1, V2) bool) bool
- func Clear[K comparable, V any](m map[K]V)
- func Clone[K comparable, V any](m map[K]V) map[K]V
- func Add[K comparable, V any](dst, src map[K]V)
- func Filter[K comparable, V any](m map[K]V, keep func(K, V) bool)
slice
该提案建议定义一个新的包 slices,它将提供可用于任何类型的 slice 的函数:
下面的描述侧重于描述 API 的提供:
- package slices
- import "constraint"
- func Equal[T comparable](s1, s2 []T) bool
- func EqualFunc[T1, T2 any](s1 []T1, s2 []T2, eq func(T1, T2) bool) bool
- func Compare[T constraints.Ordered](s1, s2 []T) int
- func CompareFunc[T any](s1, s2 []T, cmp func(T, T) int) int
- func Index[T comparable](s []T, v T) int
- func IndexFunc[T any](s []T, f func(T) bool) int
- func Contains[T comparable](s []T, v T) bool
- func Insert[S constraints.Slice[T], T any](s S, i int, v ...T) S
- func Delete[S constraints.Slice[T], T any](s S, i, j int) S
- func Clone[S constraints.Slice[T], T any](s S) S
插入、删除、克隆的 API 比较常见,这里我就不展开了。在通用类型的切片有一些比较特殊的 API:
- func Compact[S constraints.Slice[T], T comparable](s S) S
- func CompactFunc[S constraints.Slice[T], T any](s S, cmp func(T, T) bool) S
- func Grow[S constraints.Slice[T], T any](s S, n int) S
- func Clip[S constraints.Slice[T], T any](s S) S
如果这些提议被接受,这几个新包将被包含在实现泛型后的第一个Go版本中(我们目前预计将是Go 1.18)。
从issues 的讨论来看,通用类型的新包支持很大概率会实现,主要争议在实现细节,例如:性能、命名、规范等。
实现后值得期待,又是一次生产力的优化!
网站题目:Go提案:增加泛型版Slices和Maps新包
URL标题:http://www.mswzjz.cn/qtweb/news4/483504.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能