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

相关文章
|
19天前
|
存储 Go
|
20天前
|
并行计算 安全 Go
Go语言的并发特性
【10月更文挑战第26天】Go语言的并发特性
10 1
|
20天前
|
Java Go 数据处理
go语言使用切片而非数组
【10月更文挑战第18天】
11 1
|
19天前
|
Go
|
2月前
|
存储 Go 索引
Go to Learn Go之映射
Go to Learn Go之映射
36 7
|
1月前
|
存储 安全 Go
Go语言切片:从入门到精通的深度探索###
本文深入浅出地剖析了Go语言中切片(Slice)这一核心概念,从其定义、内部结构、基本操作到高级特性与最佳实践,为读者提供了一个全面而深入的理解。通过对比数组,揭示切片的灵活性与高效性,并探讨其在并发编程中的应用优势。本文旨在帮助开发者更好地掌握切片,提升Go语言编程技能。 ###
|
2月前
|
Go 索引
Go to Learn Go之切片
Go to Learn Go之切片
30 1
|
1月前
|
安全 Java Go
Go语言的其他特性
【10月更文挑战第10天】Go语言的其他特性
|
2月前
|
编译器 Go 索引
Go数组、多维数组和切片(动态数组),及常用函数len(),cap(),copy(),append()在切片中的使用
本文介绍了Go语言中数组、多维数组和切片(动态数组)的基本概念和操作,包括数组的定义、初始化、访问,多维数组的定义和访问,以及切片的创建、使用和扩容。同时,还讲解了切片中常用的函数len()、cap()、copy()和append()的使用方法。
|
存储 JSON JavaScript
Go 有别于其他语言的九个特性
Go 有别于其他语言的九个特性
331 0