Go 1.21的新特性: 切片和映射

简介: Go 1.21的新特性: 切片和映射

slice


Contains


  • before


func ContainsBefore(numbers []int, n int) bool {
 for _, number := range numbers {
  if number == n {
   return true
  }
 }
 return false
}


  • after


import "slices"
...
slices.Contains(numbers, 3)


Equal


  • before


func EqualBefore(a, b []int) bool {
 if len(a) != len(b) {
  return false
 }
 for i, number := range a {
  if number != b[i] {
   return false
  }
 }
 return true
}


  • after


import "slices"
...
slices.Equal(a, b)


Compact


  • before


func CompactBefore(numbers []int) []int {
 var result []int
 for _, number := range numbers {
  if len(result) == 0 || result[len(result)-1] != number {
   result = append(result, number)
  }
 }
 return result
}


  • after


import "slices"
...
compacted := slices.Compact(numbers)
// for numbers []int{1, 2, 3, 3, 4, 5, 5}
// compacted is []int{1, 2, 3, 4, 5}


Reverse


  • before


func ReverseBefore(numbers []int) {
 for i := 0; i < len(numbers)/2; i++ {
  j := len(numbers) - i - 1
  numbers[i], numbers[j] = numbers[j], numbers[i]
 }
}


  • after


import "slices"
...
slices.Reverse(numbers)


新的 slices 包还含有很多有用的函数,比如 Min,Max 等等,详情可以查看这里。


map


Equal


  • before


func BeforeEqual(m1, m2 map[string]string) bool {
 if len(m1) != len(m2) {
  return false
 }
 for k, v := range m1 {
  if v != m2[k] {
   return false
  }
 }
 return true
}


  • after


import "maps"
...
maps.Equal(m1, m2)


Delete


  • before


func DeleteBefore(m map[string]string) {
 for k, v := range m {
  if v == "before" {
   delete(m, k)
  }
 }
}


  • after


import "maps"
...
maps.DeleteFunc(m, func(k, v string) bool {
  return v == "after"
 })


Clear


函数Clear删除映射中的所有元素或将切片中的所有元素归零。


  • slice


numbers := []int{1, 2, 3, 4, 5}
clear(numbers)
// After clear
// Capacity is 5
// Lenght is 5
// numbers is [0 0 0 0 0]


  • map


m := map[string]string{
  "first":  "before",
  "second": "after",
 }
clear(m)
// After clear
// Lenght is 0
// map is empty


附录:


slices 包文档:https://pkg.go.dev/slices

相关文章
|
1月前
|
Prometheus Cloud Native Go
Go 1.22 标准库 slices 新增函数和一些旧函数增加新特性
Go 1.22 标准库 slices 新增函数和一些旧函数增加新特性
|
11天前
|
存储 缓存 Go
在 Go 中如何复制切片和映射?
【8月更文挑战第31天】
26 0
|
11天前
|
设计模式 编译器 程序员
|
11天前
|
存储 Go 数据处理
C 数组和 Go 切片的区别详解
【8月更文挑战第31天】
20 0
|
1月前
|
Go
Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围
Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围
|
14天前
|
人工智能 编译器 Go
Go从入门到放弃之数组、切片
Go从入门到放弃之数组、切片
|
27天前
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
|
28天前
|
人工智能 Go
go切片参数传递用值还是指针
go切片参数传递用值还是指针
25 0
|
1月前
|
Go 开发者
Go1.22 新特性:Slices 变更 Concat、Delete、Insert 等函数,对开发挺有帮助!
Go1.22 新特性:Slices 变更 Concat、Delete、Insert 等函数,对开发挺有帮助!
Go基础(复杂类型):映射
映射 映射将键映射到值。 映射的零值为 nil 。nil 映射既没有键,也不能添加键。 make 函数会返回给定类型的映射,并将其初始化备用。
821 0