https://pkg.go.dev/golang.org/x/exp中包含很多有用的包

文章目录
exp包
constraints
maps
rand
slices

go官方实验包 https://pkg.go.dev/golang.org/x/exp中包含很多有用的包;通过 go get golang.org/x/exp可方便获取。
exp包
exp包是实验性的,后续可能会合并到主分支或废弃;并且不能保证与Go1的兼容性。

constraints
constraints包中定义了一些有用的泛型参数约束集合:

Complex:复数
Float:浮点数
Integer:整数
Signed:有符号整数
Unsigned:无符号整数
Ordered:数字与字符串
maps
maps中定义了一些有用的方法,用于处理map与类型:

Clear(m):清空m中的条目;
Clone(m):返回m的一个拷贝(键与值皆浅拷贝);
Copy(dst, src):把src中的条目追加到dst中(同名键被覆盖);
DeleteFunc(m, del func(K, V) bool):删除满足条件的条目;
Equal(m1, m2):比较两个map是否相等
EqualFunc(m1, m2, eq func(V1, V2) bool):根据条件比较两个map是否相等;
Keys(m)[]K:返回map中的所有键(顺序不确定);
Values(m)[]V:返回map中的所有值(顺序不确定);
rand
rand包中实现了伪随机数生成器:

ExpFloat64() float64:以指数形式返回(0, +math.MaxFloat64] 间数;
Float32() float32:返回[0.0,1.0)间浮点数;
Float64() float64:返回[0.0,1.0)间浮点数;
Int() int:返回非负的整数;
Int31() int32:返回非负的31位整数;
Int31n(n int32) int32:返回[0,n)间的整数;
Int63() int64:返回非负的整数;
Int63n(n int64) int64:返回非负的63位整数;
Intn(n int) int:返回[0,n)间的整数;
NormFloat64() float64:返回满足正态分布的 [-math.MaxFloat64, +math.MaxFloat64]间的数;
Perm(n int) []int:返回包含[0,n)间所有数字的切片(顺序随机);
Read(p []byte) (n int, err error):填充p为随机数;
Seed(seed uint64):设定随机种子;
Shuffle(n int, swap func(i, j int)):洗牌(根据i,j交换元素);
Uint32() uint32:返回32位无符号整数;
Uint64() uint64:返回64位无符号整数;
func main() {
numbers := []byte("12345")
letters := []byte("ABCDE")
// Shuffle numbers, swapping corresponding entries in letters at the same time.
rand.Shuffle(len(numbers), func(i, j int) {
numbers[i], numbers[j] = numbers[j], numbers[i]
letters[i], letters[j] = letters[j], letters[i]
})
for i := range numbers {
fmt.Printf("%c: %c\n", letters[i], numbers[i])
}
}

slices
slices中定义了一些处理切片有用的方法:

BinarySearch(x []E, target E) (int, bool):在以升序排列的切片中二分查找(若找到,返回其下标;否则为其应插入的位置);
BinarySearchFunc(x []E, target E, cmp func(E, E) int) (int, bool):以指定的方式进行二分查找;
Clip(s S) S:裁剪(移除多余的未用空间);
Clone(s S) S:复制切片(元素使用浅拷贝);
Compact(s S) S:返回压缩(移除相邻的相同元素,只留一个副本)后的切片,原切片也被修改(但长度未变);
CompactFunc(s S, eq func(E, E) bool) S:使用指定方式压缩;
Compare(s1, s2 []E) int:比较;
CompareFunc(s1 []E1, s2 []E2, cmp func(E1, E2) int) int:比较;
Contains(s []E, v E) bool:是否存在;
Delete(s S, i, j int) S:移除[i:j)间元素;
Equal(s1, s2 []E) bool:是否相等;
EqualFunc(s1 []E1, s2 []E2, eq func(E1, E2) bool) bool:是否相等;
Grow(s S, n int) S:增加容量;
Index(s []E, v E) int:返回v首次出现的索引,未找到返回-1;
IndexFunc(s []E, f func(E) bool) int:按指定方式查找;
Insert(s S, i int, v …E) S:在i位置插入元素;
IsSorted(x []E) bool:判断是否排序;
IsSortedFunc(x []E, less func(a, b E) bool) bool:判断是否排序;
Sort(x []E):排序(升序);
SortFunc(x []E, less func(a, b E) bool):按指定方式排序;
SortStableFunc(x []E, less func(a, b E) bool):稳定排序;
func deleteElem() {
s := []int{1, 2, 3, 4, 5, 6, 7}
fmt.Println("before:", s)
s2 := slices.Delete(s, 0, 1)
fmt.Println("ori:", s)
fmt.Println("del:", s2)
}

// before: [1 2 3 4 5 6 7]
// ori: [2 3 4 5 6 7 7]
// del: [2 3 4 5 6 7]
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/alwaysrun/article/details/125129890

posted @ 2024-06-24 22:44  技术颜良  阅读(4)  评论(0编辑  收藏  举报